WCF 交談範例
更新:2007 年 11 月
交談範例會示範如何使用 PeerChannel 實作多方交談應用程式。其他所有執行個體 (Instance) 都會收到交談應用程式的任何執行個體所傳送的訊息。
若要取得範例及其安裝指示
請執行下列其中一項或多項作業:
按一下 [說明] 功能表上的 [範例]。
讀我檔案會顯示範例的相關資訊。
造訪 Visual Studio 2008 範例 網站 (英文)。您可以在此找到最新版的範例。
在已安裝 Visual Studio 的電腦中尋找範例。根據預設,範例和讀我檔案會安裝在 drive:\Program Files\Microsoft Visual Studio 9.0\Samples\lcid 中。如果是 Visual Studio Express 版,則所有範例都能在線上找到。
如需詳細資訊,請參閱尋找範例檔案。
安全性注意事項: |
---|
範例程式碼可說明整個概念,並顯示和此概念相關的程式碼。此程式碼可能不符合特定環境的安全性要求,您也不應該以範例所示的方法使用此程式碼。我們建議您新增安全性及錯誤處理程式碼,讓您的專案更安全完善。Microsoft 提供的程式碼未經修改,並且不對任何可能造成的後果負任何責任。 |
若要執行範例
在 [方案總管] 中,開啟 .sln 檔。
每當有步驟參考用戶端或服務時,這些步驟會套用至範例的個別執行個體 (因為交談範例不是用戶端或服務應用程式)。
按下 F5 執行交談應用程式。
啟動您所需個數的執行個體 (位於 Visual Basic installation path\Projects\Chat\Instance\Bin\Debug\Instance.exe 中的具名執行個體)。起先輸入暱稱,以便分辨從特定用戶端執行個體傳送的訊息。輸入此名稱不久後,即可將交談訊息傳送至網狀拓撲網路。應將這些訊息傳送至所有具有不同成員名稱的其他執行個體 (意即,不會顯示來自名稱相同的用戶端的訊息,而且單一用戶端本身的訊息也不會傳送至該用戶端的主控台視窗)。
示範
此交談範例並不是用戶端和服務應用程式,而其實是一種對等應用程式,其中的每個執行個體都可做為其他執行個體的對等個體。每個執行個體都可以透過 Ichat 雙工合約傳送訊息給其他執行個體,以及接收來自其他執行個體的訊息。
重要概念
PeerChannel 為 Windows Communication Foundation (WCF) 中的多方、對等 (P2P) 通訊技術,有助於進行安全、可擴充且可靠的通訊。受惠於 PeerChannel 之多方應用程式的其中一個常見範例,就是共同作業應用程式,例如交談應用程式。在交談應用程式中,一群人可以不需要透過伺服器,以對等方式彼此通訊。PeerChannel 能夠進行 P2P 共同作業、內容散發、負載平衡,以及消費者和企業案例的分散式處理。
PeerChannel 引進了下列新概念:
「網狀拓撲」(Mesh) 為對等節點的具名集合 (互連圖形),這些對等節點可以互相通訊,並分別以唯一的網狀網路 ID 進行身分識別。
注意事項: 網狀拓撲中的使用中節點會發佈其網狀拓撲名稱,好讓其他節點能夠找到它們。網狀拓撲能夠適應不斷改變的成員資格,它在節點不斷加入和離開的網路環境中,提供彈性的連線方式,而且會動態進行最佳化以順應各種網路流量模式。
網狀拓撲中的使用中節點會發佈其網狀拓撲名稱,好讓其他節點能夠找到它們。網狀拓撲能夠適應不斷改變的成員資格,它在節點不斷加入和離開的網路環境中,提供彈性的連線方式,而且會動態進行最佳化以順應各種網路流量模式。
「對等節點」(Peer Node) 為網狀拓撲中的端點。單一應用程式可以有多個參與不同網狀拓撲的對等節點。
對等解析程式 (Resolver) 會負責將網狀網路 ID 解析為網狀拓撲中節點的端點位址。對等節點會使用這些位址來連接至網狀拓撲中的其他節點。如此一來,訊息即可散佈於整個網狀拓撲中。
交談應用程式是一種 Windows Form 應用程式。交談應用程式的每個執行個體會建立具有相同端點位址的 IDuplexChannel。因為交談應用程式的所有執行個體會使用相同的位址,所以其對等通道上的其他所有執行個體都會收到應用程式的某個執行個體所傳送的訊息。
交談應用程式會定義並實作 IChat 雙工合約。IChat 合約僅允許單向作業,因為 ServiceModel 不支援單一要求/多個回應的開發架構 (在多方通道中,已傳送至網狀拓撲的單一要求可以產生多個回應)。
這個範例會實作靜態 Main 函式以建立含有 IChat 雙工合約的 IClientChannel。此函式會使用在組態檔中指定的端點。
所有交談執行個體都必須使用相同的端點位址,以確保其他所有執行個體會收到某個執行個體所傳送的訊息。
這個範例中的交談執行個體會使用自訂解析程式或使用預設對等解析程式 (PNRP) 找出彼此。請注意,Windows Server 2003 本身不提供 PNRT。因此,必須使用自訂解析程式才能在 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 鍵,即可關閉執行個體。
注意事項: |
---|
此範例目前不會處理基礎結構所擲回的所有可能例外狀況 (Exception)。如果您是在商業環境或實際執行環境中使用這些範例,請遵循適當的例外狀況處理最佳做法。 |