對等通道安全交談

這個範例會示範如何搭配密碼型驗證來使用 NetPeerTcpBinding 繫結,以提供使用對等通道的多方通訊。這個範例是使用者入門範例的變化。如需 Windows Communication Foundation (WCF) 的概觀,請參閱使用者入門範例

在此範例中,應用程式執行個體是自我裝載的主控台應用程式。

和其他傳輸繫結範例不一樣,這個範例會使用 IChat 合約介面來說明多方通訊。所有執行個體都會實作此合約,以接收訊息並使用相同的合約建立 Proxy,進而將訊息傳送至網狀結構。您可以建立網狀結構的 DuplexChannel 來瞭解這個過程。

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

為了方便了解範例中的繫結組態程序,您需要具備下列對等通道概念:

  • 對等解析程式」(Peer Resolver) 會負責將網狀結構識別碼解析為網狀結構中少數節點的端點位址。
  • 網狀結構」(Mesh) 是對等節點的具名集合,這些對等節點是透過網狀結構識別碼所識別。
  • 對等節點」(Peer Node) 是參與網狀結構之應用程式的執行個體。
  • 網狀結構識別碼可用來識別網狀結構中端點位址的主機部分。例如,如果這些位址是 "net.p2p://chatMesh/servicemodelsamples/chat" 或 "net.p2p://broadcastMesh/servicemodelsamples/announcements",則其中的 chatMesh 和 broadcastMesh 即是網狀結構識別碼。
  • 參與網狀結構的所有用戶端都會使用相同的網狀結構識別碼,但可能會使用不同的路徑和服務。針對特定端點位址發出的訊息會傳遞到所有使用該位址的對等通道。

對等節點開啟 (因開啟對等通道而開啟) 時,會使用對等解析程式將網狀結構識別碼解析為要連接的幾個其他對等節點位址。這會建立相連節點的網狀結構,並使訊息得以在整個網狀結構上傳播。

PeerTransportCredentialType 會指定網狀結構中對等節點彼此驗證的方法。您可以在繫結組態中、NetPeerTcpBinding 物件中或使用 PeerTransportBindingElement 來指定這個屬性。於對等屬性上指定且含有適當認證的 ClientCredentialSettings (或 ServiceCredentialSettings) 執行個體,必須根據不同用法來新增到通道處理站或 ServiceHost 上的行為集合中。

  1. 這個範例會使用密碼驗證模式來保護對等通道的安全 (這是預設模式)。在芳鄰之間建立安全連線,並交換此密碼轉換,就可完成上述動作。指定 Password 時,ClientCredentialSettings.Peer 屬性必須具備有效的密碼,並選擇性具備 X509Certificate2 執行個體 (使用 SetSelfCertificate)。

繫結會在應用程式的組態檔中指定。繫結型別是在端點項目的 Binding 屬性中指定,如下列範例所示。

<client>
   <!-- chat instance participating in the mesh -->
   <endpoint name="SecureChatEndpoint"
            address="net.p2p://SecureChatMesh/servicemodelsamples/chat"
             binding="netPeerTcpBinding"
             bindingConfiguration="SecureChatBinding"
             contract="Microsoft.ServiceModel.Samples.IChat">
   </endpoint>
 </client>

如果您搭配預設行為使用 NetPeerTcpBinding 繫結,就會啟用密碼架構安全性。繫結項目會提供一些屬性,讓您可以設定連接埠、接聽 IP 位址、解析程式類型、訊息大小上限、緩衝集區大小上限、讀取器配額、對等節點驗證模式、訊息驗證和逾時 (關閉、開啟、傳送和接收)。

注意:這個範例會使用預設對等解析程式 (PNRP),但是此解析程式無法在 Windows Server 2003 中使用。因此,若要在 Windows Server 2003 中執行這個範例,您必須使用自訂對等解析程式。請參閱對等通道交談,以取得使用自訂對等解析程式的範例,例如:

<netPeerTcpBinding>
   <binding configurationName="Binding1"> 
    <resolver mode="Custom">
       <customResolver 
            type="MyAppNameSpace.MyCustomPeerResolver, myApp"/>
    </resolver>
   </binding>
</netPeerTcpBinding>

包含 MyCustomPeerResolver 的檔案必須與應用程式一起編譯。請注意,如果範例是在不同平台的多部電腦上執行,這些電腦就必須都使用相同的解析程式。

這個交談實作也會示範如何擷取與接收者或傳送者執行個體相關聯的對等節點,以及如何註冊其線上和離線事件。當對等節點連接至網狀結構中至少一個其他對等節點時,就會觸發線上事件。當對等節點不再連接至網狀結構中任何其他對等節點時,則會觸發離線事件。

此時,對等通道不會與 Service Model Metadata Utility Tool (Svcutil.exe) 整合。因此,無法使用 Svcutil.exe 為傳送者產生型別通道。

當您執行範例時,用戶端會提示您輸入暱稱和密碼,之後用戶端會顯示訊息,指出已準備好傳送訊息。交談訊息會顯示在其他的用戶端主控台視窗中。若要終止用戶端,請在用戶端的主控台視窗中按下 Q 鍵,再按 ENTER。

如果啟用追蹤或訊息記錄,則可以監視更深層級的傳送者和接收者活動。下列程序章節描述如何啟用追蹤和訊息記錄。

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

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

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

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

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

  4. 若要在 Windows XP SP2 上安裝 PNRP (一次安裝):

    1. 按兩下 [控制台] 中的 [新增或移除程式]。
    2. 按一下 [新增或移除程式] 對話方塊中的 [新增/移除 Windows 元件]。
    3. 在 [Windows 元件精靈] 中,選取 [網路服務] 核取方塊,再按一下 [詳細資料]。
    4. 核取 [對等] 核取方塊,然後按一下 [確定]。
    5. 按一下 [Windows 元件精靈] 中的 [下一步]。
    6. 完成安裝時,請按一下 [完成]。
    7. 從命令殼層提示字元中,使用下列命令來啟動 PNRP 服務:net start pnrpsvc
  5. 啟動範例的多個執行個體,在每個執行個體中輸入暱稱和密碼。每個用戶端的暱稱應該有所區分,而所有執行個體的密碼應該保持相同。由應用程式的一個執行個體所發出的交談訊息會被所有其他執行個體接收,前提是暱稱都不同且密碼相符。允許多個用戶端有相同的暱稱,但來自相同暱稱之用戶端的訊息不會顯示出來。

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