發行及連接到 StreamInsight 伺服器

 

在 StreamInsight 用戶端程式中,您可以選擇在同處理序使用內嵌 StreamInsight 伺服器並連接到遠端伺服器。 在兩種情況下,您都可以使用伺服器物件建立 StreamInsight 應用程式,並且定義實體,例如事件來源和接收。 為了連接到遠端伺服器執行個體,主控 StreamInsight 伺服器必須公開 Web 服務管理能力介面。

在同處理序主控時,StreamInsight 伺服器會透過下列呼叫來建立:

Server server = Server.Create(…);  

另外,StreamInsight 用戶端也可以連接到當做個別處理序執行的遠端伺服器。 在下列範例中,用戶端會連接到特定端點位址所識別的伺服器。

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

此範例會連接到已安裝的 StreamInsight 服務,其執行個體名稱為 "MyInstance"。請注意,若要連接到任何 StreamInsight 伺服器 (已安裝的服務或您自訂的伺服器應用程式),連接的使用者必須隸屬於對應至伺服器執行個體的群組。 如需這類群組及 StreamInsight 服務的詳細資訊,請參閱<安裝 (StreamInsight)>。

若要讓 Connect() 方法成功,遠端伺服器必須透過給定統一資源識別碼 (URI) 上的 Web 服務端點來公開它的管理能力介面。 例如,StreamInsight 事件流程偵錯工具是一種用戶端應用程式,當它連接到即時伺服器的某個端點時,可以從執行中的查詢擷取有關查詢和其他伺服器層級物件或記錄事件的診斷資訊,以進行進一步的偵錯。

如果您在安裝 StreamInsight 時設定 StreamInsight 主機 Windows 服務,那麼就可以連接到做為遠端伺服器的該服務。 應用程式可以公開裝載之 StreamInsight 伺服器的管理能力介面,其方式是加入 Web 服務端點,如下列範例所示。 此範例假設名為 "MyInstance" 的已註冊 StreamInsight 執行個體已存在。

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

請注意,您必須加入 Microsoft.ComplexEventProcessing.ManagementService.dll 的參考並指定對應的命名空間,才能夠使用管理服務。

StreamInsight 是使用 Windows Communication Foundation (WCF) 做為 Web 服務介面。 WCF 組態的完整討論內容已超出本文件集的範疇,但是您在公開 Web 服務時應考量以下要點:

  • 欲繫結至指定的 URL,該 URL 需要保留給即將執行應用程式的使用者帳戶。 如果 StreamInsight 應用程式不是以系統管理員權限執行,則您必須在提高權限的命令 Shell 中執行下列命令:

    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,  
            "http://localhost:8090/MyStreamInsightServer");  
    
    

    如同其他任何 WCF 屬性,這也可以在 app.config 中指定。

    接著,您也必須使用 netsh 命令,以保留對應的 URL 範圍:

    netsh http add urlacl url=http://localhost:8090/MyStreamInsightServer user=<domain\userid>  
    
    
  • 在上述範例中,端點組態是以程式設計方式指定。 另外,也可透過 app.config 檔來設定端點,就像任何以 WCF 為基礎的其他應用程式一樣。 例如,已安裝的 StreamInsight 服務會針對每一個已註冊的執行個體,利用這類宣告式組態。 您可以在 StreamInsight 安裝資料夾底下的 Host\<instance_name> 中找到名為 StreamInsightHost.exe.config 的組態檔。

  • 在 Windows XP 和 SWindows Server 2003 上,無法使用 netsh。 但是,您必須安裝 Windows Server 2003 支援工具,並使用 httpcfg 命令從 "<磁碟機>:Program Files\Support Tools\" 保留 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

  • 啟用遠端連接時,必須在伺服器的防火牆中開啟指定的通訊埠。

  • 如果使用電腦名稱,跨網路將用戶端連接至遠端伺服器執行個體,則會採用 Kerberos 驗證,而有別於使用 IP 位址時的 NTLM 驗證方式。 這代表用戶端在連接之前,必須先設定端點的使用者主要名稱 (UPN) 識別。

    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 事件流程偵錯工具
StreamInsight 配接器端對端範例

顯示: