Я начал использовать StreamInsight и использую его как сервис wcf.Я уже пытался обратиться за помощью в « Руководство автостопом по Microsoft StreamInsight Queries » и пробовал примеры, а также примеры в codeplex.
Моя проблема заключается в следующем:
Мой источник событий передает адаптеру AlertEvent:
public sealed class AlertEvent
{
public DateTime Date { get; set; }
public long IDGroup { get; set; }
public bool IsToNormalize { get; set; }
public bool IsError { get; set; }
}
Когда AlertEvent имеет IsError = false, флаг IsToNormalize имеет значение true;
Поведение, которого я пытаюсь достичь, - это когда я получаю поток с IsError, я хочу посмотреть, поступит ли в следующие 'x' минуты какой-либо alertEvent с IsToNormalize.Затем я отправляю на выход IsError AlarmEvent, который начал поиск.
Что я сделал, когда получил вход, соответствующий фильтру, я продлил его время жизни в 'x' минутах и создал TumblingWindowчтобы увидеть, если в этот период прибывает другое AlertEvent с другим флагом (используя ExtensionMethod для перебора всех полезных нагрузок в окне).
var stream= from item in input
where item.IsError
group item by item.IdGroup into eachGroup
from window in eachDigital.AlterEventDuration(e => TimeSpan.FromMinutes((double)1.5)).TumblingWindow(TimeSpan.FromSeconds(15), HoppingWindowOutputPolicy.ClipToWindowEnd)
select new
{
Id = eachDigital.Key,
NormEvents = window.HasNormalizationEvents(),
Count = window.Count()
};
Затем, чтобы получить AlarmEvent, который вызвал TumblingWindow, ясделал соединение с оригинальным вводом.
var resultStream = from e1 in stream
join e2 in input
on e1.Id equals e2.DigitalTag
where e1.NormEvents != 0
select e2;
Это совсем не работает ...: / Есть идеи, которые помогут решить эту проблему?
Еще одно сомнение, если у меня есть, еслибудет создано новое окно с новой startDate для каждого входа, который проходит фильтр, или будет создано только одно tumblingWindow.
Спасибо.