共用方式為


對等通道自訂驗證

這個範例會示範如何搭配使用 NetPeerTcpBinding 繫結和自訂驗證模式,這個模式可透過應用程式提供的對等驗證而提供多方通訊。這個範例是使用者入門範例的變化。請參閱使用者入門範例以取得 Windows Communication Foundation (WCF) 的概觀。

在此範例中,所有執行個體都是自我裝載的應用程式,與用戶端和伺服器則無關。

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

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

對等通道為 WCF 中的多方對等 (P2P) 通訊技術。它為應用程式開發人員提供了安全、可擴充的訊息 P2P 通訊通道。某種可受益於對等通道的多方應用程式範例為共同作業應用程式,例如一群人可透過對等方式彼此交談,而不需要用到伺服器的交談。對等通道能夠讓消費者和企業方案進行 P2P 共同作業、內容散發、負載平衡,以及分散式處理。

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

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

    ms751447.note(zh-tw,VS.90).gif注意:
    網狀結構中的使用中節點會發行其網狀結構名稱,好讓其他節點能夠找到它們。網狀結構具有下列特性:當節點加入和離開網狀結構時,會自動進行調整,以確定所有節點都能正確無誤地連接至網狀結構,並且會根據目前的傳輸模式動態地最佳化連線。

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

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

PeerTransportCredentialType 會指定網狀結構中對等節點彼此驗證的方法。您可以在繫結組態中、NetPeerTcpBinding 物件中或使用 PeerTransportBindingElement 來指定這個屬性。您必須視用法而定,將 ClientCredentialSettings (或 ServiceCredentialSettings) 執行個體與 Peer 屬性上指定的適當認證新增至通道處理站或服務主機上的行為集合。

對等通道支援在 PeerTransportCredentialType 類別中的下列驗證模式:

  1. Password. 這是對等通道的預設驗證模式。在此模式中,網狀結構中的所有參與者都需要證明他們知道秘密密碼。在芳鄰之間建立安全連線,並交換此密碼轉換,就可完成上述動作。指定 Password 時,ClientCredentialSettings.Peer 屬性必須具備有效的密碼,並選擇性具備 X509Certificate2 執行個體 (使用 SetSelfCertificate)。
  2. Certificate. 在此模式中,建立對等連線時會執行應用程式特定的驗證。指定此模式時,應用程式必須在新增至通道處理站的 ClientCredentialSettings.Peer.PeerAuthentication 中指定 X509Certificate2Validator 的具象實作。

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

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

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

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

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

必須使用交談執行個體,編譯具有 MyCustomPeerResolver 的檔案。請注意,如果範例是在不同平台的多部電腦上執行,這些電腦就必須都使用相同的解析程式。

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

此時,對等通道不會與 ServiceModel Metadata Utility Tool (Svcutil.exe) 相整合。

執行範例時,用戶端會顯示一則訊息,指出已準備傳送訊息。某用戶端傳送的訊息會出現在所有其他加入至相同網狀結構之用戶端的主控台視窗上。若要終止用戶端,請在用戶端的主控台視窗上按 Q 鍵,然後再按 ENTER。

如果啟用追蹤或訊息記錄,則可以在較深的層集中監視訊息活動。下列程序說明如何啟用追蹤和訊息記錄。

ms751447.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. 無論步驟 3 參考用戶端和服務的狀況為何,這些步驟都會套用至不同的應用程式執行個體。

  6. 如果是第一次在電腦上執行此範例,請執行 Setup.bat 以建立會發出授權的憑證以及兩個用戶端憑證。所發出授權的預設名稱為 "TrustedPeerChannelIssuer",而用戶端憑證則為 "peer1" 和 "peer2"。如下所示將引數傳遞至 Setup.bat,即可選擇性指定名稱:"setup.bat <peername> <issuername>",其中 <peername> 是用戶端的前置名稱,而 <issuername> 是範例受信任簽發者的名稱。例如,輸入 "setup.bat peer fake_issuer" 會建立名稱為 "fake_issuer" 的受信任簽發者,以及名稱為 "peer1" 和 "peer2" 的用戶端憑證。如果在單一電腦上執行範例的所有執行個體,請繼續進行步驟 7。

  7. 多台電腦設定的其他步驟:若要在不同電腦上執行範例,則必須將憑證資訊從單一電腦複製至執行範例的所有其他電腦,這樣所有對等節點上的簽發者資訊才會保持一致。操作的方法為匯出使用受信任的簽發者 (透過 Setup.bat 所產生) 所建立的用戶端憑證。受信任的簽發者 (如果使用預設名稱,則為 TrustedPeerChannelIssuer.cer) 也必須複製至執行範例的所有其他用戶端電腦。請遵循下列這三個步驟:

    1. 傳輸受信任的簽發者:將 .cer 檔 (在相同資料夾中執行 Setup.bat 所產生的檔案) 複製至用戶端電腦。以滑鼠右鍵按一下該檔案,然後選取 [安裝憑證]。按 [下一步],然後選取 [將所有憑證放入以下的存放區]。按 [瀏覽] 然後選取 [受信任的人] 做為憑證目的。選取 [下一步] 和 [完成] 以完成匯入憑證。
    2. 匯出用戶端憑證:一開始先在用來產生用戶端憑證的電腦上執行 Certmgr.msc。從個人存放區中選取用戶端憑證 (在 [憑證 - 目前使用者] -> [個人] -> [憑證] 下)。以滑鼠右鍵按一下該憑證,然後依序選取 [所有工作] -> [匯出],以啟動 [憑證匯出精靈]。按 [下一步] 後選取 [是,匯出私密金鑰],然後按 [下一步]。再選取 [下一步],選擇 .pfx 格式和預設值。輸入憑證的密碼,然後再按 [下一步]。最後,選擇路徑和檔案名稱,然後按 [下一步] 和 [完成] 以完成匯出處理序。
    3. 匯入用戶端憑證:將步驟 (b) 建立的 .pfx 檔複製至用戶端電腦。以滑鼠右鍵按一下該檔案,然後選取 [安裝 PFX]。按兩下 [下一步],然後輸入用來匯出憑證的密碼。按 [下一步] 和 [完成],將憑證放置在個人存放區中。
      ms751447.note(zh-tw,VS.90).gif注意:
      使用檔案傳輸建立受信任的簽發者並匯出時,如果沒有以適當的方式散發檔案,則可能會有特定的安全性風險。執行範例之後,請確實清除範例憑證 (步驟 8)。

  8. 依需求執行多個應用程式執行個體。某個執行個體傳送的訊息會由其他執行個體所接收。每個執行個體的預設名稱都為 "peer1"。若要分辨特定的執行個體,請變更應用程式組態檔之 appSettings 的 "member" 金鑰值,並建立同名的用戶端憑證。

  9. 最後,執行 Cleanup.bat 以移除此範例建立的憑證。如果沒有使用預設名稱,請以步驟 6 中使用的相同值來執行 "Cleanup.bat <peername> <issuername>"。

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