服務經常發佈元數據,以啟用用戶端 Proxy 類型的自動產生和設定。 當服務不受信任時,用戶端應用程式應該驗證元數據是否符合用戶端應用程式的安全性、交易、服務合約類型等原則。 下列範例示範如何撰寫用戶端端點行為,以驗證服務端點,以確保服務端點安全使用。
服務會公開四個服務端點。 第一個端點使用 WSDualHttpBinding、第二個端點使用 NTLM 驗證、第三個端點啟用交易流程,而第四個端點則使用憑證式驗證。
用戶端會使用 類別 MetadataResolver 來擷取服務的元數據。 用戶端會使用驗證行為強制執行禁止雙工系結、NTLM 驗證和交易流程的原則。 針對從服務元資料匯入的每個ServiceEndpoint實體,用戶端應用程式會在嘗試使用 Windows Communication Foundation (WCF) 用戶端連線至端點之前,將端點行為的InternetClientValidatorBehavior
實例ServiceEndpoint新增至 。 行為的 Validate
方法會在任何呼叫服務的作業之前執行,並藉由擲回 InvalidOperationExceptions
來強制執行客戶端的原則。
建置範例
- 若要建置解決方案,請遵循 建置 Windows Communication Foundation 範例中的指示。
在同一部電腦上執行這個範例
使用系統管理員許可權開啟 Visual Studio 的開發人員命令提示字元,然後從範例安裝資料夾執行 Setup.bat。 這會安裝執行範例所需的所有憑證。
從 \service\bin\Debug 執行服務應用程式。
從 \client\bin\Debug 執行用戶端應用程式。 用戶端活動會顯示在用戶端主控台應用程式上。
如果客戶端和服務無法通訊,請參閱 WCF 範例 的疑難解答秘訣。
當您完成範例時,請執行 Cleanup.bat 來移除憑證。 其他安全性範例使用相同的憑證。
在多台電腦上執行範例
在伺服器上,在 Visual Studio 的開發人員命令提示字元中,以系統管理員許可權執行,輸入
setup.bat service
。 使用setup.bat
自變數執行service
會建立具有電腦完整域名的服務憑證,並將服務憑證導出至名為 Service.cer 的檔案。在伺服器上,編輯 App.config 以反映新的憑證名稱。 也就是說,將
findValue
元素中的 < 屬性變更為電腦的完整域名。將Service.cer檔案從服務目錄複製到用戶端電腦上的客戶端目錄。
在用戶端上,以系統管理員許可權開啟 Visual Studio 的開發人員命令提示字元,然後輸入
setup.bat client
。 通過setup.bat
並使用client
參數執行這個指令,將會建立一個名為 Client.com 的用戶端憑證,並將該憑證匯出到一個名為 Client.cer 的檔案中。在 client.cs 檔案中,變更 MEX 端點的位址值以及
findValue
的設定,將預設伺服器憑證的位址調整到符合您服務的新位址。 您可以藉由將localhost取代為伺服器的完整功能變數名稱來執行此動作。 重建。將Client.cer檔案從客戶端目錄複製到伺服器上的服務目錄。
在用戶端上,在以系統管理員許可權開啟的Visual Studio開發人員命令提示字元中執行 ImportServiceCert.bat。 這會將服務憑證從 Service.cer 檔案匯入 CurrentUser - TrustedPeople 存放區。
在伺服器上,在以系統管理員許可權開啟的Visual Studio開發人員命令提示字元中執行 ImportClientCert.bat。 這會將客戶端憑證從 Client.cer 檔案匯入 LocalMachine - TrustedPeople 存放區。
在服務計算機上,在 Visual Studio 中建置服務專案,然後執行 service.exe。
在用戶端電腦上,執行 client.exe。
- 如果客戶端和服務無法通訊,請參閱 WCF 範例 的疑難解答秘訣。
在範例之後清除
在您完成執行範例之後,請在samples資料夾中執行 Cleanup.bat。
備註
在跨電腦執行此範例時,此腳本不會移除用戶端上的服務憑證。 如果您已執行跨計算機使用憑證的 WCF 範例,請務必清除已在 CurrentUser - TrustedPeople 存放區中安裝的服務憑證。 若要這樣做,請使用下列命令:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
。