StreamInsight サーバーへのパブリッシュおよび接続

StreamInsight アプリケーションでは、StreamInsight サーバーをインプロセスで埋め込むか、リモート サーバーに接続するかを選択できます。どちらの場合も、StreamInsight クエリを開発するには、サーバー オブジェクトを使用します。リモート インスタンスに接続するには、StreamInsight サーバーをホストし、Web サービス管理インターフェイスを公開する必要があります。

サーバーへの接続

インプロセスでホストされている場合、StreamInsight サーバーは次の呼び出しを介して作成されます。

    Server server = Server.Create(…);

または、StreamInsight アプリケーションで、個別のプロセスとして実行されている既存のサーバーに接続することもできます。次の例では、クライアント アプリケーションが、特定のエンド ポイント アドレスで識別されるサーバーに接続します。

    Server server = Server.Connect(new System.ServiceModel.EndpointAddress(@"https://localhost/StreamInsight/MyInstance"));

この例では、"MyInstance" というインスタンス名を持つ、インストール済みの StreamInsight サービスに接続します。StreamInsight サーバー (インストール済みのサービスまたはカスタム サーバー アプリケーション) に接続するためには、接続ユーザーがサーバー インスタンスに対応するグループに属している必要があることに注意してください。このグループおよび StreamInsight サービスの詳細については、「インストール (StreamInsight)」を参照してください。

サーバー エンド ポイントの公開

Connect() メソッドが適切に機能するには、サーバーが管理インターフェイスを、指定された URI (Uniform Resource Identifier) で Web サービスのエンド ポイントを介して公開する必要があります。たとえば、StreamInsight Event Flow Debugger は、ライブ サーバーのエンド ポイントへの接続時に、詳細なデバッグを行うために、クエリや他のサーバーレベル オブジェクトまたはレコード イベントについての診断情報を実行クエリから取得できるクライアント アプリケーションです。

アプリケーションは、次の例で示すように、Web サービスのエンド ポイントを追加すると、ホストされた StreamInsight サーバーの管理インターフェイスを公開できます。この例では、"MyInstance" という名前の登録済みの StreamInsight インスタンスが存在することが前提となっています。

    Server server = Server.Create("MyInstance");
    ServiceHost host = new ServiceHost(server.CreateManagementService());
    host.AddServiceEndpoint(typeof(IManagementService),
                            new WSHttpBinding(SecurityMode.Message),
                            "https://localhost:8090/MyStreamInsightServer");
    host.Open();
    ...
    host.Close;

管理サービスを使用するためには、Microsoft.ComplexEventProcessing.ManagementService.dll への参照を追加し、対応する名前空間を指定する必要があることに注意してください。

StreamInsight では、Web サービス インターフェイスに Windows Communication Foundation (WCF) を使用します。WCF 構成の詳細については、このドキュメントでは説明しませんが、Web サービスを公開するときには次の点に留意してください。

  • 指定した URL にバインドするためには、その URL がアプリケーションを実行するユーザー アカウント用に予約されている必要があります。StreamInsight アプリケーションを管理者権限で実行しない場合は、次のコマンドを昇格されたコマンド シェルで実行する必要があります。

    netsh http add urlacl url=http://+:8090/MyStreamInsightServer user=<domain\userid>
    

    netsh によって URL を予約するためには、ポート名を指定する必要があります。既に使用されていないポートを選択します。現在予約されている URL を表示するには、次のコマンドを使用します。

    netsh http show urlacl
    

    URL 予約でワイルドカードを使用するとバインドの HostNameComparisonMode パラメーターに影響することに注意してください。バインドの既定の一致モードは StrongWildcard です。たとえば、ホスト名を完全一致させる (サーバーのエンドポイント指定で "localhost" を使用しながら、ローカル クライアントのみ接続できるようにする) 場合は、まず対応する一致モードを設定する必要があります。

    WSHttpBinding binding = new WSHttpBinding(SecurityMode.Message);
    binding.HostNameComparisonMode = HostNameComparisonMode.Exact;
    host.AddServiceEndpoint(typeof(IManagementService),
            binding,
            "https://localhost:8090/MyStreamInsightServer");
    

    他の WCF プロパティと同様に、これは app.config 内でも指定できます。

    次に、netsh コマンドを使用して、対応する URL スコープを予約する必要もあります。

    netsh http add urlacl url=https://localhost:8090/MyStreamInsightServer user=<domain\userid>
    
  • 前の例では、エンド ポイント構成がプログラムで指定されています。エンド ポイントは、WCF に基づく他のアプリケーションと同じように app.config ファイルで構成することもできます。たとえば、インストール済みの StreamInsight サービスは、登録済みインスタンスごとに、このような宣言による構成を使用します。構成ファイルは、Host\<instance_name> の下の StreamInsight のインストール フォルダーにある、StreamInsightHost.exe.config です。

  • Windows XP および Windows Server 2003 では、netsh は使用できません。代わりに、Windows Server 2003 サポート ツールをインストールし、"<drive>:Program Files\Support Tools\" から httpcfg コマンドを使用して URL を予約する必要があります。ネットワーク サービス アカウント用にワイルドカード URL を予約するコマンドの例を次に示します。

    httpcfg set urlacl /u http://+:80/StreamInsight/MyStreamInsightServer /a "D:(A;;GX;;;NS)"
    

ネットワーク内の接続用に Web サービスを公開するときには、次の点を考慮してください。

  • 既定では、インストールされた StreamInsight サービスでは、ローカル接続のみが許可されます。インストールされたサービスの Web サービスを localhost 以外のコンピューターに公開する必要がある場合は、上記の手順に従い、次のようにする必要があります。

    1. サービスの URL 予約を明示的な "localhost" からワイルドカード "+" に変更します。

    2. サービスの app.config におけるホスト名の一致を StrongWildcard に変更します。

  • リモート接続を有効にするときには、指定したポートがサーバーのファイアウォールで開いている必要があります。

  • コンピューター名を使用してクライアントをネットワーク経由でリモート サーバー インスタンスに接続するときには、IP アドレスの場合に使用する NTLM ではなく Kerberos を認証に使用します。したがって、クライアントは接続の前にエンドポイントのユーザー プリンシパル名 (UPN) ID を設定する必要があります。

    EndpointIdentity ei = EndpointIdentity.CreateUpnIdentity(WindowsIdentity.GetCurrent().Name);
    EndpointAddress ea = new EndpointAddress(new Uri(@"http://machinename:8090/MyStreamInsightServer"), ei, (AddressHeaderCollection)null);
    server = Server.Connect(ea);
    

エンド ポイント指定の詳細については、WCF のドキュメントを参照してください。

関連項目

概念

StreamInsight サーバーおよびクエリの監視

StreamInsight Event Flow Debugger の使用

StreamInsight エンド ツー エンドの例

変更履歴

変更内容

「サーバー エンド ポイントの公開」のコード例を修正し、新たな情報を追加しました。