監視可能なイベント ソース/シンクと列挙可能なイベント ソース/シンクの使用 (StreamInsight)
StreamInsight は、IObservable インターフェイスおよび IEnumerable インターフェイスを実装するイベント ソースとイベント シンクをサポートしています。これらのインターフェイスは、アプリケーションのコンポーネント間でデータをプル (IEnumerable) およびプッシュ (IObservable) するための .NET Framework の主要な汎用コントラクトです。
IEnumerable と IEnumerator は、.NET 開発者には既におなじみのインターフェイスですが、IObservable と IObserver は、.NET Framework 4 で導入された比較的新しいインターフェイスです。IObservable の開発モデルは、監視対象/オブザーバー デザイン パターンに基づいています。
オブザーバーは、別のオブジェクトの状態が変更されたときに通知されるオブジェクトです。
監視対象は、別のオブジェクトによって関心が示されているプッシュ ベースのシーケンスです。
StreamInsight アプリケーションでは、イベント ソースが監視対象になります。クエリはこのソースのオブザーバーとして機能し、その結果を監視対象としてイベント シンクに提示します。イベント シンクは、クエリをソースとするオブザーバーになります。詳細については、MSDN の「オブザーバー デザイン パターンの検証」を参照してください。
この開発モデルを実現するためのアプリケーション開発者の作業は、次のように最小限に抑えられています。
IObservable インターフェイスまたは IEnumerable インターフェイスを実装するクラスをイベント プロデューサーとして提供します。
IObserver インターフェイスを実装するクラスか、IEnumerable を使用するクラスを、イベント コンシューマーとして提供します。
それらのオブジェクトをクエリにバインドします。
この開発モデルでは、イベントの一時プロパティを定義するために学習やプログラミングに大きな投資を行ったり、基になるコア アダプター モデルの状態遷移を意識したりする必要はありません。この開発モデルに適合するシナリオの例を以下に示します。
履歴クエリ。フィナンシャル アナリストの Alice は、大規模なデータセットに対する一時的なクエリを実行して、市場の履歴データのパターンを見つけています。この場合、入力ストリームに明確な終わりがあり、最後のデータ要素が処理されたらクエリを終了する必要があります。
ライブ ソースに対するアドホック クエリ。サービス拒否攻撃が行われているのではないかと考えているサーバー管理者の Bob は、監視しているネットワーク データのストリームに対して一連のアドホック クエリを繰り返し実行して、攻撃のソースを特定しています。
カスタム アプリケーションへの埋め込み。ユーザー インターフェイス開発者の Charlie は、Windows イベントに対する一時的なクエリを使用して、マウス ジェスチャのパターンを設計および分析しています。StreamInsight はそのカスタム アプリケーションに埋め込まれています。
上の各ケースでクエリが存在するのは、クライアント アプリケーションが結果を求めている間だけです。
このセクションの内容
このセクションのトピックは次のとおりです。
監視可能なソース/シンクと列挙可能なソース/シンクのプログラミングに関する考慮事項
監視可能なソース/シンクと列挙可能なソース/シンクは埋め込みソリューションでのみサポートされる
監視可能なイベント ソース/シンクや列挙可能なイベント ソース/シンクがサポートされるのは、StreamInsight サーバーがアプリケーションに埋め込まれる、ホストされている配置モデルだけです。スタンドアロンやリモート サーバーの配置モデルでは使用できません。配置モデルの詳細については、「StreamInsight サーバーの配置モデル」を参照してください。
StreamInsight の時間の要件は API 機能によってサポートされている
API は、CTI イベントのキューへの登録など、StreamInsight の時間モデルに完全に対応しています。
監視可能な入力と列挙可能な入力の場合:
To[Point|Interval|Edge]Stream メソッドにより、入力データが StreamInsight イベントとしてラップされ、ソース データの時間特性が指定されます。
AdvanceTimeSettings クラスのヘルパー メソッドとプロパティを使用して、CTI イベントがキューに登録される頻度を指定できます。これにより、入力データの活動状態が決まります。
監視可能な出力と列挙可能な出力の場合: To[Point|Interval|Edge]Observable メソッドおよび To[Point|Interval|Edge]Enumerable メソッドを使用して、時間の情報をポイント、期間、エッジの各イベントの形で組み込むかどうかを選択できます。
監視対象のサポートは Microsoft .NET Framework 4 に依存する
IObservable インターフェイスや IObserver インターフェイスを実装するイベント ソースやイベント シンクをアプリケーションで使用する場合:
アセンブリ Microsoft.ComplexEventProcessing.Observable.dll に参照を追加します。
アプリケーションのターゲットを .NET Framework 4 (.NET Framework 4 Client Profile は不可) にする必要があります。