對等通道訊息驗證
這個範例會示範搭配訊息驗證來使用 NetPeerTcpBinding 繫結,以提供使用對等通道的多方通訊。這個範例是使用者入門範例的變化。如需 Windows Communication Foundation (WCF) 的概觀,請參閱使用者入門範例。
在此範例中,應用程式執行個體是自我裝載的主控台應用程式。
和其他傳輸繫結範例不一樣,這個範例會使用 IQuoteChange
合約介面來說明多方通訊。所有執行個體都會實作此合約,以接收訊息並建立相同合約的 Proxy,進而將訊息傳送至網狀結構。將雙工通道建立為網狀結構即可示範。
注意: |
---|
此範例的安裝程序與建置指示位於本主題的結尾。 |
為了方便瞭解範例中的繫結組態程序,您需要具備下列對等通道概念:
- 「對等解析程式」(Peer Resolver) 會負責將網狀結構識別碼解析為網狀結構中少數節點的端點位址。
- 「網狀結構」(Mesh) 是對等節點的具名集合,這些對等節點是透過網狀結構識別碼所識別。
- 「對等節點」(Peer Node) 是參與網狀結構之應用程式的執行個體。
- 網狀結構識別碼可用來識別網狀結構中端點位址的主機部分。例如,如果這些位址是 "net.p2p://chatMesh/servicemodelsamples/chat" 或 "net.p2p://broadcastMesh/servicemodelsamples/announcements",則其中的 chatMesh 和 broadcastMesh 即是網狀結構識別碼。
- 參與網狀結構的所有用戶端都會使用相同的網狀結構識別碼,但可能會使用不同的路徑和服務。針對特定端點位址發出的訊息會傳遞到所有使用該位址的用戶端。
當對等節點開啟時,會使用對等解析程式將網狀結構識別碼解析為網狀結構中其他對等節點位址的清單。這可讓訊息傳播至整個網狀結構。
PeerTransportCredentialType 會指定網狀結構中對等節點彼此驗證的方法。這個屬性可以透過繫結組態 (即 NetPeerTcpBinding 物件) 或是使用 PeerTransportBindingElement 繫結項目來指定。您必須視用法而定,將 ClientCredentialSettings (或 ServiceCredentialSettings) 執行個體與 Peer 屬性上指定的適當認證新增至通道處理站或服務主機上的行為集合。
對等通道支援在 PeerTransportCredentialType 類別中的下列驗證模式:
- Password. 這是對等通道的預設驗證模式。在此模式中,網狀結構中的所有參與者都需要證明他們知道秘密密碼。在芳鄰之間建立安全連線,並交換此密碼轉換,就可完成上述動作。指定 Password 時,ClientCredentialSettings.Peer 屬性必須具備有效的密碼,並選擇性具備 X509Certificate2 執行個體 (使用 SetSelfCertificate )。
- Certificate. 在此模式中,建立對等連線時會執行應用程式特定的驗證。指定此模式時,應用程式必須在已新增至通道處理站的 ClientCredentialSettings.Peer.PeerAuthentication 中指定 X509Certificate2Validator 的具象實作。
當 NetPeerTcpBinding.Security.Mode
屬性設定為 SecurityMode.Message
或 SecurityMode.TransportWithMessageCredential
時,應用程式可以簽署傳出訊息與驗證傳入訊息。
簽署傳出訊息時會使用 ClientCredentialSettings.Peer.SetSelfCertificate()
指定的 X509Certificate2
執行個體。
訊息簽署執行時會使用 X509Certificate2
的執行個體。若是要簽署傳出訊息 (在使用 DuplexChannel
的 OutputChannel
時),應用程式必須使用 PeerCredential.SetSelfCertificate().
指定要用來簽署的認證。
若是要確認傳入訊息 (InputChannel
或 DuplexChannel
),應用程式必須指定可驗證訊息來源 X509Certificate2Validator
的具象實作,並使用 ServiceCredentialSettings.Peer.MessageSenderAuthentication()
加以指定。
傳送者和接收者的組態檔中會指定繫結。繫結型別是在 endpoint
項目的 binding
屬性中指定,如下列範例所示。
<services>
<service name="Microsoft.ServiceModel.Samples.BroadcastReceiver">
<!-- use base address provided by the host -->
<endpoint address="Stocks"
binding="netPeerTcpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.IQuoteChange" />
</service>
</services>
如果您搭配預設行為使用 NetPeerTcpBinding
繫結,就會啟用密碼架構安全性。binding
項目會提供一些屬性,讓您可以設定連接埠、接聽 IP 位址、解析程式類型、訊息大小上限、緩衝集區大小上限、讀取器配額、對等節點驗證模式、訊息驗證和逾時 (關閉、開啟、傳送和接收)。
注意: |
---|
這個範例會使用無法用於 WCF 的預設對等解析程式 (PNRP)。因此,若要在 WCF 上執行此範例,您必須使用自訂對等解析程式。如需取得使用自訂對等解析程式的範例,請參閱對等通道交談,如下列範例所示。 |
<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 為傳送者產生型別通道。
執行此範例時,傳送者會顯示訊息,表示已準備好要傳送訊息。輸入值後按下 ENTER,將目前的股價值傳送至接收者用戶端。更新會顯示在其他用戶端主控台視窗中。若要終止用戶端,請在傳送者的主控台視窗中輸入空白值 (或按下接收者用戶端的 ENTER)。
如果啟用追蹤或訊息記錄,則可以監視更深層級的傳送者和接收者活動。下列程序描述如何啟用追蹤和訊息記錄。
注意: |
---|
您必須注意,此範例目前不會處理基礎架構可能擲回的所有可能例外狀況。如果您在商用/實際執行環境中使用這些範例,請遵循正確的例外狀況處理最佳做法。 |
若要設定、建置及執行範例
若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循建置 Windows Communication Foundation 範例中的指示。
若要在單一電腦組態中執行範例,請遵循執行 Windows Communication Foundation 範例中的指示。
若要在 Windows XP SP2 上安裝 PNRP (一次安裝):
- 按兩下 [控制台] 中的 [新增或移除程式]。
- 按一下 [新增或移除程式] 對話方塊中的 [新增/移除 Windows 元件]。
- 在 [Windows 元件精靈] 中,選取 [Networking Services] 方塊,再按一下 [詳細資料]。
- 核取 [對等] 核取方塊,然後按一下 [確定]。
- 按一下 [Windows 元件精靈] 中的 [下一步]。
- 完成安裝時,請按一下 [完成]。
- 從命令殼層提示字元中,使用下列命令來啟動 PNRP 服務:net start pnrpsvc。
只要是步驟 3 所指的用戶端和服務,這些步驟都適用於傳送者和接收者。
如果第一次執行這個範例,請執行 Setup.bat 建立與註冊此範例使用的憑證。如果跨電腦使用此範例,只要在其中一台電腦執行 Setup.bat,然後將產生的憑證匯出至其他要使用的所有電腦。這是因為 Setup.bat 會建立隨機憑證,所以每次執行 Setup.bat 都會產生與註冊唯一的憑證。
啟動接收者 (或多個接收者) 和傳送者。當執行個體連線時,在傳送者應用程式的主控台中輸入值,即可將更新傳送至接收者。所有接收者都會收到傳送者傳送的交談訊息。
執行 Cleanup.bat 以移除此範例所建立的憑證。
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.