對等通道交談

此交談範例示範如何使用對等通道實作多方交談應用程式。其他所有執行個體 (Instance) 都會收到交談應用程式的任何執行個體所傳送的訊息。

交談範例並非根據用戶端和服務的概念,而是真正的對等應用程式,其中每一個執行個體都可做為其他執行個體的對等個體。每個執行個體都可以透過 IChat 雙工合約傳送訊息給其他執行個體,以及接收來自其他執行個體的訊息。

交談範例是以 自我裝載 範例為基礎。如需 Windows Communication Foundation (WCF) 的高階概觀,請參閱使用者入門範例

ms751502.note(zh-tw,VS.90).gif注意:
此範例的安裝程序與建置指示位於本主題的結尾。

重要概念:

對等通道為 WCF 中的多方對等 (P2P) 通訊技術。它為應用程式開發人員提供了安全、可擴充的訊息 P2P 通訊通道。像「交談」這樣的共同作業應用程式,即是受惠於對等通道多方應用程式的其中一個例子;一群人可以在這裡透過對等方式彼此交談,而不需要伺服器。對等通道能夠進行 P2P 共同作業、內容散發、負載平衡,以及消費者和企業案例的分散式處理。

對等通道引進了下列新概念:

  • 網狀結構」(Mesh) 是對等節點的具名集合 (相互連結的圖形),這些對等節點可以互相通訊,並且分別由唯一的網狀結構識別碼來識別。

    ms751502.note(zh-tw,VS.90).gif注意:
    網狀結構中的使用中節點會發行其網狀結構名稱,好讓其他節點能夠找到它們。網狀結構具有下列特性:它會隨著不斷改變的成員資格調整;在節點時常加入和離開網狀結構的環境中,提供彈性的連接能力,以及根據網路流量模式動態進行最佳化。

  • 對等節點」(Peer Node) 是網狀結構中的端點。單一應用程式可以擁有多個參與不同網狀結構的對等節點。

  • 對等解析程式」(Peer Resolver) 會負責將網狀結構識別碼解析為網狀結構中節點的端點位址。對等節點使用這些位址來連接網狀結構中的其他節點。這可讓訊息傳播至整個網狀結構。

交談是主控台應用程式。交談應用程式的每個執行個體都會建立具有相同端點位址的 IDuplexChannel。因此,所有其他執行個體都會收到交談應用程式的某個執行個體在對等通道上傳送的訊息 (因為它們都使用相同的位址)。

交談應用程式會定義並實作 IChat 雙工合約。IChat 合約只允許單向作業,這是因為 ServiceModel 不支援單一要求、多重回應的架構 (在多方通道的情況下,傳送至網狀結構的單一要求可以產生多個回應)。

這個範例會實作靜態 main 函式以建立 IClientChannel with IChat 雙工合約,並使用組態檔中指定的端點。

所有交談執行個體都必須使用相同的端點位址,以確保其他所有執行個體會收到某個執行個體傳送的訊息。

這個範例中的交談執行個體會透過自訂解析程式或預設對等解析程式 (PNRP) 找到彼此。請注意,Windows Server 2003 本身不提供 PNRP。因此,自訂解析程式必須在 Windows Server 2003 系統上執行這個範例。根據預設,這個範例設定為使用自訂解析程式。下列組態檔中定義的交談端點會決定要使用自訂解析程式還是預設解析程式。若要切換至預設對等解析程式 (PNRP),請在本範例組態檔中的 bindingConfiguration 底下,以 "BindingDefault" 取代 "BindingCustomResolver"。

<!-- chat instance participating in the mesh -->
         <endpoint name="ChatEndpoint"
                   address="net.p2p://chatMesh/ServiceModelSamples/Chat" 
                   binding="netPeerTcpBinding" 
                   bindingConfiguration="BindingCustomResolver" 
                   contract="Microsoft.ServiceModel.Samples.IChat">
         </endpoint>

若要讓對等節點與 對等通道自訂對等解析程式 服務通訊,就必須在組態檔中定義 對等通道自訂對等解析程式 的用戶端組態。

<!-- Client used to communicate with the custom resolver service. -->
<client>
<endpoint configurationName="CustomPeerResolverEndpoint"
address="net.tcp://localhost/ServiceModelsamples/peerResolverService"
    binding="netTcpBinding"
    bindingConfiguration="Binding3"
    contract="Microsoft.ServiceModel.SamplesICustomPeerResolver">
</endpoint>
</client>

位址是用於識別解析程式服務的位址。如果解析程式服務是在遠端電腦上執行,請以完整網域名稱取代 localhost

範例還會示範如何從 IClientChannel 擷取對等節點,以及如何使用 IOnlineStatus 註冊線上和離線事件。當對等節點連接至網狀結構中至少一個其他對等節點時,就會初始化線上事件。當對等節點不再連接至網狀結構中任何其他對等節點時,則會啟始離線事件。

目前無法產生中繼資料 (Metadata),因為「對等通道」並未與服務中繼資料公用程式 (Svcutil.exe) 整合。

當您執行此範例時,某個交談執行個體所傳送的交談訊息會顯示在其他交談執行個體的主控台視窗中。在每個主控台視窗中,按下 Q 鍵、再按 ENTER,即可關閉執行個體。

ms751502.note(zh-tw,VS.90).gif注意:
此範例目前無法處理基礎結構擲回的所有可能例外狀況 (Exception)。如果您在商用或實際執行環境中使用這些範例,請遵循正確的例外狀況處理最佳做法。

若要設定、建置及執行範例

  1. 請確定您已執行 Windows Communication Foundation 範例的單次安裝程序

  2. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。

  3. 若要在單一或跨電腦的組態中執行本範例,請遵循執行 Windows Communication Foundation 範例中的指示。

  4. 此外,對交談範例來說,下列步驟都適用。只要在步驟 3 中提及用戶端和服務,這些步驟都適用於範例中的個別執行個體 (因為交談範例不具用戶端和服務的概念)。

  5. 如果 bindingConfiguration 設定為 BindingDefault,請確定已在目前使用的所有電腦上安裝並啟用 PNRP。如果 bindingConfiguration 設定為 BindingCustomResolver,請確定目前使用的所有電腦上,都已經啟動交談專案/方案目錄之 Chat\<language>\CustomerResolver\bin 目錄底下的自訂解析程式服務。

  6. 啟動所需數量的多個應用程式執行個體。請先輸入可分辨從特定用戶端執行個體傳來之訊息的暱稱。輸入此名稱不久後,即可將交談訊息傳送至網狀結構。這些訊息必須回應 (Echo) 至所有其他具有不同成員名稱的執行個體 (也就是說,不顯示來自同名用戶端的訊息,也不將單一用戶端本身的訊息顯示到主控台)。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.