共用方式為


自訂通道發送器

此範例示範如何使用自訂的方式,直接實作 ServiceHostBase 來建立通道堆疊,以及如何在 Web 主機環境中建立自訂通道發送器。 通道發送器會與 IChannelListener 互動,以接受通道並擷取來自通道堆疊的訊息。 此範例也提供基本範例,示範如何在 Web 主機環境中使用 VirtualPathExtension 建立通道堆疊。

自訂 ServiceHostBase

此範例實作基底類型 ServiceHostBase (而非 ServiceHost) 來示範如何使用通道堆疊頂端的自訂訊息處理層取代 Windows Communication Foundation (WCF) 堆疊實作。 您要覆寫虛擬方法 InitializeRuntime 才能建立通道接聽項和通道發送器。

若要實作 Web 裝載的服務,請從 Extensions 集合取得服務延伸 VirtualPathExtension,並將其加入至 BindingParameterCollection,讓傳輸層知道如何根據裝載環境設定 (亦即,Internet Information Services (IIS)/Windows Process Activation Service (WAS) 設定) 來設定通道接聽項。

自訂通道發送器

自訂通道發送器會延伸 ChannelDispatcherBase 類型。 此類型會實作通道層的程式設計邏輯。 在此範例中,要求-回覆訊息交換模式只支援 IReplyChannel,但自訂通道發送器可以輕易地延伸到其他通道類型。

發送器會先開啟通道接聽項,然後接受單一回覆通道。 它會利用通道,開始以無限迴圈傳送訊息 (要求)。 針對每個要求,它都會建立一個回覆訊息,並將其傳回用戶端。

建立回應訊息

訊息處理是以 MyServiceManager 類型實作。 在 HandleRequest 方法中,會先檢查訊息的 Action 標頭,以查看是否支援要求。 系統會定義預先定義的 SOAP 動作 "http://tempuri.org/HelloWorld/Hello" 來提供訊息篩選。 這類似於 ServiceHost 之 WCF 實作中的服務合約概念。

若是正確的 SOAP 動作案例,此範例會擷取要求的訊息資料,並針對要求產生類似於 ServiceHost 案例中看到的對應回應。

在此情況下,您要透過傳回自訂 HTML 訊息來明確地處理 HTTP-GET 動詞命令,讓您可以從瀏覽器瀏覽服務,以查看它是否正確編譯。 如果 SOAP 動作不相符,請傳回錯誤訊息以指出此要求不受到支援。

此範例的用戶端是一個標準的 WCF 用戶端,不會假定來自服務的任何事項。 因此,此服務是特別針對符合您從一般 WCF ServiceHost 實作所取得的項目而設計。 所以,在用戶端上只需要一個服務合約。

使用範例

執行用戶端應用程式會直接產生下列輸出。

用戶端正在與要求/回覆 WCF 服務進行通訊。 
將您要說的話輸入到伺服器:Howdy
伺服器回覆:You said: Howdy。 訊息識別碼:1
伺服器回覆:You said: Howdy。 訊息識別碼:2
伺服器回覆:You said: Howdy。 訊息識別碼:3
伺服器回覆:You said: Howdy。 訊息識別碼:4
伺服器回覆:You said: Howdy。 訊息識別碼:5

您也可以從瀏覽器瀏覽服務,讓 HTTP-GET 訊息在伺服器上繼續執行。 如此會回覆您正確格式的 HTML 文字。

Ee943696.Important(zh-tw,VS.100).gif 注意:
這些範例可能已安裝在您的電腦上。 請先檢查下列 (預設) 目錄,然後再繼續。

<InstallDrive>:\WF_WCF_Samples

如果此目錄不存在,請移至用於 .NET Framework 4 的 Windows Communication Foundation (WCF) 與 Windows Workflow Foundation (WF) 範例 (英文),以下載所有 Windows Communication Foundation (WCF) 和 WF 範例。 此範例位於下列目錄。

<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Channels\CustomChannelDispatcher