從 WSE 3.0 Web 服務移轉至 WCF

從 WSE 3.0 Web 服務移轉至 Windows Communication Foundation (WCF) 的好處,包括更好的效能、對其他傳輸、其他安全案例,以及 WS-* 規格的支援。從 WSE 3.0 移轉至 WCF 的 Web 服務可以感受到 200% 到 400% 的效能提升。如需 WCF 所支援之傳輸的詳細資訊,請參閱選擇傳輸。如需 WCF 所支援的案例清單,請參閱常見的安全性案例。如需 WCF 所支援的規格清單,請參閱 Web 服務通訊協定互通性手冊

下列各節將提供指南,說明如何將 WSE 3.0 Web 服務的特定功能移轉至 WCF。

一般

WSE 3.0 與 WCF 應用程式包含連線層級的互通性與一般的用語集。WSE 3.0 與 WCF 應用程式根據同時支援的 WS-* 規格可以在連線層級上互通。一旦開發出 WSE 3.0 或 WCF 應用程式,會產生一般的用語集,例如 WSE 中的通行安全性判斷提示名稱以及驗證模式。

儘管 WCF 和 ASP.NET 或 WSE 3.0 程式設計模型之間有許多類似之處,其本質仍然不同。如需 WCF 程式設計模型的詳細資訊,請參閱基本程式設計週期

ms732008.note(zh-tw,VS.90).gif注意:
若要從 WSE Web 服務移轉至 WCF,可以使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 工具來產生用戶端。然而,該用戶端同時內含可用來做為 WCF 服務起點的介面與類別。產生的介面會將 OperationContractAttribute 屬性套用到合約成員 (同時將 ReplyAction 屬性設為 *)。當 WSE 用戶端透過此設定來呼叫 Web 服務,會擲回下列例外狀況:[Web.Services3.ResponseProcessingException: WSE910: 處理回應訊息時發生錯誤,您可以在內部例外狀況中找到錯誤]。若要緩解這個情況,請將 OperationContractAttribute 屬性 (Attribute) 的 ReplyAction 屬性 (Property) 設為非 null 值,例如 http://Microsoft.WCF.Documentation/ResponseToOCAMethod

安全性

使用原則檔來保護安全的 WSE 3.0 Web 服務

WCF 服務可以使用組態檔來保護服務安全,且該機制與 WSE 3.0 原則檔類似。在 WSE 3.0 中,當您使用原則檔來保護 Web 服務安全時,可以使用通行安全性判斷提示或自訂原則判斷提示來進行。通行安全性判斷提示會緊密對應至 WCF 安全性繫結項目的驗證模式。WCF 驗證模式與 WSE 3.0 通行安全性判斷提示不只名稱上相同或類似,它們還會使用相同的認證類型來保護訊息安全。例如,WSE 3.0 中的 usernameForCertificate 通行安全性判斷提示會對應至 WCF 中的 UsernameForCertificate 驗證模式。下列程式碼範例示範在 WSE 3.0 中使用 usernameForCertificate 通行安全性判斷提示的最小原則如何在自訂繫結中對應至 WCF 的 UsernameForCertificate 驗證模式。

WSE 3.0

<policies>
  <policy name="MyPolicy">
    <usernameForCertificate messageProtectionOrder="SignBeforeEncrypt"
                            requireDeriveKeys="true"/>
  </policy>
</policies>

WCF

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="UserNameForCertificate" 
              messageProtectionOrder="SignBeforeEncrypt"
              requireDerivedKeys="true"/>
  </binding>
</customBinding>

若要將原則檔中指定的 WSE 3.0 Web 服務安全性設定移轉到 WCF,必須在組態檔中建立自訂繫結,並將通行安全性判斷提示設為相等的驗證模式。另外,自訂繫結必須設定為使用 August 2004 WS-Addressing 規格,以便 WSE 3.0 用戶端與服務進行通訊。當移轉的 WCF 服務不需要與 WSE 3.0 用戶端進行通訊,而且只須維護安全性同位時,請考慮使用 WCF 系統定義繫結 (包含適當的安全性設定),而不要建立自訂繫結。

下表將列出 WSE 3.0 原則檔與 WCF 中相等的自訂繫結之間的對應。

WSE 3.0 通行安全性判斷提示 WCF 自訂繫結組態

<usernameOverTransportSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="UserNameOverTransport" />
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<mutualCertificate10Security />

<customBinding>
  <binding name="MyBinding">
    <security messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" authenticationMode="MutualCertificate" />
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<usernameForCertificateSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="UsernameForCertificate"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<anonymousForCertificateSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="AnonymousForCertificate"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<kerberosSecurity />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="Kerberos"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

<mutualCertificate11Security />

<customBinding>
  <binding name="MyBinding">
    <security authenticationMode="MutualCertificate"/>
    <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" />
  </binding>
</customBinding>

如需建立 WCF 自訂繫結的詳細資訊,請參閱自訂繫結

使用應用程式程式碼來保護安全的 WSE 3.0 Web 服務

不管使用的是 WSE 3.0 或 WCF,都可以在應用程式程式碼中 (不用透過組態檔) 指定安全性需求。在 WSE 3.0 中,您可以建立衍生自 Policy 類別的類別,然後呼叫 Add 方法來新增需求以達到這個目的。如需指定程式碼中安全性需求的詳細資訊,請參閱 HOW TO:在未使用原則檔的情況下保護 Web 服務的安全 (本頁面可能為英文)。在 WCF,若要指定程式碼中的安全性需求,請建立 BindingElementCollection 類別的執行個體,然後將 SecurityBindingElement 執行個體新增到 BindingElementCollection。安全性判斷提示需求可透過 SecurityBindingElement 類別的靜態驗證模式協助程式方法來加以設定。如需使用 WCF 來指定程式碼中的安全性需求詳細資訊,請參閱 HOW TO:使用 SecurityBindingElement 建立自訂繫結HOW TO:為指定的驗證模式建立 SecurityBindingElement

WSE 3.0 自訂原則判斷提示

在 WSE 3.0 中,有兩種自訂原則判斷提示類型:分別是用來保護 SOAP 訊息安全的原則判斷提示,以及無法保護 SPAO 訊息安全的原則判斷提示。用來保護 SOAP 訊息安全的原則判斷提示係衍生自 WSE 3.0 SecurityPolicyAssertion 類別,且在 WCF 中,概念上等同於 SecurityBindingElement 類別。

很重要的一點就是,WSE 3.0 通行安全性判斷提示是 WCF 驗證模式的子集。如果您已在 WSE 3.0 中建立自訂原則判斷提示,可能會有相等的 WCF 驗證模式。例如,WSE 3.0 不會提供等同於 UsernameOverTransport 通行安全性判斷提示的 CertificateOverTransport 安全性判斷提示,但會使用 X.509 憑證來執行用戶端驗證。如果您已經為此案例定義自訂的原則判斷提示,WCF 會直接進行移轉。WCF 會針對此案例定義驗證模式,方便您利用靜態驗證模式協助程式方法來設定 WCF SecurityBindingElement

如果沒有等同於用來保護 SOAP 訊息安全之自訂原則判斷提示的 WCF 驗證模式,則請從 TransportSecurityBindingElementSymmetricSecurityBindingElementAsymmetricSecurityBindingElement WCF 類別衍生一個類別並指定相等的繫結項目。如需詳細資訊,請參閱 HOW TO:使用 SecurityBindingElement 建立自訂繫結

若要轉換無法保護 SOAP 訊息安全的自訂原則判斷提示,請參閱篩選與範例Custom Message Interceptor

WSE 3.0 自訂安全性權杖

用於建立自訂權杖的 WCF 程式設計模型與 WSE 3.0 不同。如需在 WSE 中建立自訂權杖的詳細資訊,請參閱建立自訂安全性權杖 (本頁面可能為英文)。如需在 WCF 中建立自訂權杖的詳細資訊,請參閱 HOW TO:建立自訂權杖

WSE 3.0 自訂權杖管理員

WCF 中用來建立自訂權杖管理員的程式設計模型與 WSE 3.0 不同。如需如何建立自訂權杖管理員,以及建立自訂安全性權杖所需之其他元件的詳細資訊,請參閱 HOW TO:建立自訂權杖

ms732008.note(zh-tw,VS.90).gif注意:
如果您已經建立自訂 UsernameToken 安全性權杖管理員,WCF 可提供您較簡易的機制讓您輕鬆指定驗證邏輯,而不用建立自訂安全性權杖管理員。如需詳細資訊,請參閱 HOW TO:使用自訂使用者名稱與密碼驗證程式

使用 MTOM 編碼 SOAP 訊息的 WSE 3.0 Web 服務

與 WSE 3 應用程式一樣,WCF 應用程式也可以在組態中指定 MTOM 訊息編碼。若要移轉此設定,請將 mtomMessageEncoding element 新增至服務的繫結中。下列程式碼範例將示範如何在 WSE 3.0 中為 WCF 中相等的服務指定 MTOM 編碼。

WSE 3.0

<messaging>
    <mtom clientMode="On"/>
</messaging>

WCF

<customBinding>
  <binding name="MyBinding">
    <mtomMessageEncoding/>
  </binding>
</customBinding>

訊息

使用 WSE 訊息 API 的 WSE 3.0 應用程式

當您使用 WSE 訊息 API 來直接存取於用戶端與 Web 服務之間進行通訊的 XML 時,可以將應用程式轉換為使用 "Plain Old XML" (POX)。如需 POX 的詳細資訊,請參閱與 POX 應用程式的互通性。如需 WSE 訊息 API 的詳細資訊,請參閱使用 WSE 訊息 API 傳送和接收 SOAP 訊息 (本頁面可能為英文)。

傳輸

TCP

根據預設,使用 TCP 傳輸來傳送 SOAP 訊息的 WSE 3.0 用戶端與 Web 服務無法與 WCF 用戶端和 Web 服務互通。這種不相容情況是因為 TCP 通訊協定中使用的框架處理方式差異以及效能因素所導致。然而,WCF 範例說明了如何實作可與 WSE 3.0 互通的自訂 TCP 工作階段。如需此範例的詳細資訊,請參閱Transport: WSE 3.0 TCP Interoperability

若要指定 WCF 應用程式使用 TCP 傳輸,請使用 netTcpBinding Element

自訂傳輸

WSE 3.0 自訂傳輸在 WCF 中的對等即為通道延伸。如需建立通道延伸的詳細資訊,請參閱擴充通道層

請參閱

工作

HOW TO:為指定的驗證模式建立 SecurityBindingElement

概念

基本程式設計週期
自訂繫結
HOW TO:使用 SecurityBindingElement 建立自訂繫結