使用可观察和可枚举的事件源和事件接收器 (StreamInsight)

StreamInsight 支持实现 IObservable 和 IEnumerable 接口的事件源和事件接收器。这些接口是 .NET Framework 中主导的通用约定,用来在应用程序各组件之间请求 (IEnumerable) 和推送 (IObservable) 数据。

IEnumerable 和 IEnumerator 接口已然是 .NET 开发人员所熟知的;IObservable 和 IObserver 接口则是近期才引入 .NET Framework 4 的。IObservable 开发模型基于 observable/observer 设计模式。在此设计模式中:

  • “observer”是希望在另一对象的状态改变时得到通知的任何对象。

  • “observable”是一种基于推送的序列,另一对象可在其中注册表示对其感兴趣。

在 StreamInsight 应用程序中,observable 是事件源。查询充当此源的 Observer 对象,并将其结果作为 Observable 对象呈现给事件接收器,事件接收器又是作为源的查询的 Observer 对象。有关详细信息,请参阅 MSDN 上的 Exploring the Observer Design Pattern(探索 Observer 设计模式)。

要启用此开发模型,应用程序开发人员只需执行以下几项任务:

  1. 提供一个用于实现 IObservable 或 IEnumerable 接口的类,作为事件生成器。

  2. 提供一个用于实现 IObserver 接口的类或一个使用 IEnumerable 的类,作为事件使用者。

  3. 将这些对象绑定到查询。

此开发模型并不需要投入大量时间通过学习或编程为事件定义时间属性,也不需要了解核心适配器模型的基础状态转换。以下是适用此开发模型的一些情形:

  1. 历史查询:财务分析师 Alice 可通过对大型数据集执行时间查询甄别出历史市场数据中存在的模式。在这种情况下,输入流具有确定的结尾 - 在处理完最后一个数据元素之后,查询应终止。

  2. 对实时源的即席查询:服务器管理员 Bob 怀疑受到了拒绝服务攻击。他通过对自己一直在监控的网络数据流进行一系列循环往复的即席查询,发现了攻击的源头。

  3. 嵌入在自定义应用程序内:用户界面开发人员 Charlie 通过使用针对 Windows 事件的时间查询来设计和分析鼠标手势的模式。StreamInsight 嵌入在自定义应用程序中。

在以上所有情形中,查询仅在客户端应用程序有意侦听结果的情况下才存在。

本节内容

本节包含下列主题:

可观察和可枚举的源和接收器的编程注意事项

可观察和可枚举的源和接收器仅在嵌入式解决方案中受支持

可观察或可枚举的事件源和接收器仅在托管的部署模型中受支持,在该模型中 StreamInsight 服务器嵌入在应用程序中。不能将可观察或可枚举的事件源和接收器用于独立或远程服务器部署模型。有关部署模型的详细信息,请参阅 StreamInsight 服务器部署模型

API 功能支持 StreamInsight 的时间要求

API 完全支持 StreamInsight 时间模型的所有功能,包括将 CTI 事件排队。

  • 对于可观察和可枚举的输入:

    • To[Point|Interval|Edge]Stream 方法可将输入数据打包为 StreamInsight 事件,并指定源数据的时间特征。

    • AdvanceTimeSettings 类的帮助器方法和属性可帮助开发人员指定 CTI 事件排队的频率,据此确定输入数据的实时性。

  • 对于可观察和可枚举的输出,开发人员可选择是否通过 To[Point|Interval|Edge]Observable 和 To[Point|Interval|Edge]Enumerable 方法合并点、间隔或边缘事件形式的时间信息。

是否支持 Observable 对象取决于 Microsoft .NET Framework 4

如果您的应用程序使用实现 IObservable 或 IObserver 接口的事件源或接收器:

  • 该应用程序必须引用程序集 Microsoft.ComplexEventProcessing.Observable.dll

  • 该应用程序的目标必须为 .NET Framework 4(而不是 .NET Framework 4 Client Profile)。