與 WSE 交互操作

這個範例會示範如何在 Web Service Enhancements (WSE) 3.0 服務與 Windows Communication Foundation (WCF) 用戶端或服務之間達到互通性。

範例會實作名稱為 WseHttpBinding 的自訂繫結。這個繫結可讓您使用 WSE 3.0 原則檔來設定 WCF 用戶端或服務,並達到與 WSE 3.0 的互通性。WseHttpBinding 藉由將原則檔中取自 WSE 3.0 屬性的對應提供給 WCF 繫結中的屬性,就可完成上述動作。您可以將 WseHttpBinding 視為類似標準繫結,因為它會對堆疊中其他繫結的屬性,提供條件約束的檢視,SecurityBindingElement 則最為明顯。

範例會分成兩個部分。第一個部分會示範使用 WseHttpBinding,以從 WCF 用戶端呼叫至 WCF 自我裝載的服務。第二個部分則需要安裝 WSE 3.0 SDK。

在 WCF 用戶端和服務之間使用 WseHttpBinding

CallWcfService 方法在用戶端上會建立 WseHttpBinding 的執行個體,並設定用於用戶端安全性需求的屬性:

static void Main(string[] args)
{
    CallWcfService();
    ...
}

這些需求必須符合服務之 Main 函式內設定的值,如下列程式碼所示:

//Create a ServiceHost for the CalculatorService type.
using (ServiceHost serviceHost =        new ServiceHost(typeof(CalculatorService)))
{
    //Create and configure the WseHttpBinding.
    WseHttpBinding binding = new WseHttpBinding();
    binding.SecurityAssertion =        WseSecurityAssertion.AnonymousForCertificate;
    binding.EstablishSecurityContext = true;
    binding.RequireDerivedKeys = true;
    binding.MessageProtectionOrder =        MessageProtectionOrder.SignBeforeEncrypt;

    serviceHost.AddServiceEndpoint(typeof(ICalculator), binding, "");
    ServiceCredentials creds = new ServiceCredentials();
    creds.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,
                                            StoreName.My,                                            X509FindType.FindBySubjectName,                                             "localhost");
    serviceHost.Description.Behaviors.Add(creds);
    serviceHost.Open();
    ...
}

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

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

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

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

  4. 此範例中的服務為自我裝載。因此,執行用戶端之前,請務必已執行 /service/bin 目錄中的 Service.exe 檔。

使用 WseHttpBinding 與 WSE 3.0 服務進行通訊

此專案中的用戶端也可用來與 WSE 3.0 SDK 中的 Quickstart 範例進行偷訊。

一旦安裝 WSE 3.0 SDK,便可以使用 Svcutil.exe 工具產生用戶端,而您可以使用此用戶端在建置服務之後與 WSE 3.0 服務進行通訊。下列範例會顯示如何使用在本機電腦上執行的 WSE 3.0 服務而達到通訊目的。

svcutil.exe /out:wseproxy.cs /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" https://localhost/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx

Wseproxy.cs 檔包含在此專案中。產生的 Proxy 類別名稱為 WSSecurityAnonymousServiceSoapProxy,而且會與已使用程式碼中的屬性設定,或使用載入至 Wse3PolicyCache.config 組態檔的 WSE 3.0 原則檔設定的 WseHttpBinding 一起提供。Wse3PolicyCache.config 組態檔也包含在此專案中。

順利建置 WSE 3.0 WSSecurityAnonymous 範例之後,便會在執行用戶端時從 WSE 3.0 服務安全地傳回股價。

會在本主題的結尾詳細說明 WSE 3.0 的安裝指示。

在用戶端上,對 CallWcfService 的呼叫加入註解,並對 CallWseService 的程式碼取消註解。在 truefalse 中傳遞可判斷是否使用原則檔來設定 WseHttpBinding,而您只要呼叫 LoadPolicy(String filename, String policyName) 方法 (使用 XmlReader 剖析 WSE 3.0 原則檔) 即可判定。

ms752257.note(zh-tw,VS.90).gif注意:
如果在用戶端上已安裝 WSE 3.0 而非使用 XmlReader 載入原則檔,您可以修改程式碼以使用 WSE 3.0 Microsoft.Web.Services3.Design.Policies 類別而載入原則。這樣做的優點為,Microsoft.Web.Services3.Design.Policies 類別可以剖析 WSE 3.0 原則檔所有有效的表單,並將結果提供給 WseHttpBinding。搭配使用 XmlReader 型別的程式碼時,只能剖析有限的一組原則檔。

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

  1. Web Services Enhancements (WSE) 3.0 for Microsoft .NET (本頁面可能為英文) 中安裝 WSE 3.0 產品。

  2. 閱讀 WSE 3.0 Quickstart 範例指南,以了解如何設定及安裝 WSE 範例。若要安裝正確的 X.509 憑證和建立虛擬目錄以在網際網路資訊服務 (IIS) 中裝載 Web 服務,都需要先了解其做法。明確地在預設安裝目錄 C:\Program Files\Microsoft WSE\v3.0\Samples 中執行 Setup.bat 檔。

  3. 建置 WSE 3.0 Quickstart 的原則範例 WSSecurityAnonymous,此項預設會安裝在下列目錄中 (注意:如果您想要改用程式碼,則只有一個用於 WSSecurityAnonymous 版本的程式碼。如果想要使用唯一版本的程式碼,必須將用戶端上的服務 URL 變更為 https://localhost/WSSecurityAnonymousCode/WSSecurityAnonymousService.asmx)。

  4. 此 WSE 3.0 專案位於 C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy。

  5. 此互通性範例中的 WCF 用戶端已設計為與此 WSE 3.0 Quickstart 範例進行相互操作。

  6. 在 Client.cs 檔案的 Main 函式中,取消註解 CallWseService 方法的呼叫。您可能想要取消註解 CallWcfService 的呼叫,以防止呼叫 WCF 服務。

  7. 若要建置 C# 方案,請遵循建置 Windows Communication Foundation 範例中的指示。

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

若要使用 WSE 3.0 跨電腦設定、建置及執行範例

  1. 請先設定 WSE 3.0 服務。從 Web Services Enhancements (WSE) 3.0 for Microsoft .NET (本頁面可能為英文) 中,在遠端電腦上安裝 WSE 3.0 產品。

  2. 閱讀 WSE 3.0 Quickstart 範例指南,以了解如何設定及安裝 WSE 範例。若要安裝正確的 X.509 憑證和建立虛擬目錄以在網際網路資訊服務 (IIS) 中裝載 Web 服務,都需要先了解其做法。明確地在預設安裝目錄 C:\Program Files\Microsoft WSE\v3.0\Samples 中執行 Setup.bat 檔。

  3. 建置 WSE 3.0 Quickstart 原則範例 WSSecurityAnonymous,此項預設會安裝在下列目錄中。

    ms752257.note(zh-tw,VS.90).gif注意:
    如果您想改用此項,也可以使用 WSSecurityAnonymous 的程式碼唯一版本。

  4. 這是 WSE 3.0 專案:C:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\WSSecurityAnonymous\Policy

  5. 設定伺服器時,將不會設定其他電腦上的 WCF 用戶端。使用 MMC 工具時,透過 [所有工作]->[從內容功能表匯出選項],將在 LocalMachine/Personal 憑證存放區 (您在此處安裝 WSE 3.0) 中找到的 WSE2QuickStartServer 憑證匯出至檔案。您不需要匯出私密金鑰,建立 .CER 檔案時只需要公開金鑰 (Public Key)。如需如何使用 MMC 憑證管理嵌入式管理單元來檢視憑證存放區之憑證的詳細資訊,請參閱 WSE 3.0 之 C:\Program Files\Microsoft WSE\v3.0\Samples 目錄中的 readme.htm 檔。

  6. 將 .CER 檔從伺服器電腦複製至用戶端電腦,然後將公開憑證匯入 CurrentUser/Trusted People 憑證存放區。如需如何使用 MMC 憑證管理嵌入式管理單元的詳細資訊,請參閱 WSE 3.0 之 C:\Program Files\Microsoft WSE\v3.0\Samples 目錄中的 readme.htm 檔。

    ms752257.note(zh-tw,VS.90).gif注意:
    執行 WSE 3.0 setup.bat 檔時,會為您將 WSE2QuickStartServer 伺服器憑證從某個憑證存放區複製至另一個憑證存放區。

  7. 若要在跨電腦組態中執行本範例,請遵循 WCF 用戶端之執行 Windows Communication Foundation 範例中的指示,然後將用戶端設定為使用 WSE 3.0 服務的位址,而不使用 localhost。例如,在名稱為 "mymachine" 的電腦上,預設位址如下:http://mymachine/WSSecurityAnonymousPolicy/WSSecurityAnonymousService.asmx

  8. 在 Client.cs 檔案的 Main 函式中,取消註解 CallWseService 方法的呼叫。您可能想要取消註解 CallWcfService 的呼叫,以防止呼叫 WCF 服務。

  9. 若要建置 C# 方案,請遵循建置 Windows Communication Foundation 範例中的指示。

  10. 執行該用戶端。

若要在執行範例之後進行清除

  1. 若要移除用戶端或伺服器的憑證,請使用 MMC 工具。或者,您也可以在伺服器上執行 C:\Program Files\Microsoft WSE\v3.0\Samples 目錄中的 Cleanup.bat 檔。

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