Я начал использовать StreamInsight и использую его как службу wcf. Я уже пытался обратиться за помощью в «Руководство автостопом по запросам Microsoft StreamInsight» и пробовал примеры, а также примеры в 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» минут какое-либо предупреждениеEvent с 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.
Спасибо.