Migrieren von WSE 3.0-Webdiensten zu WCFMigrating WSE 3.0 Web Services to WCF

Die Vorteile des Migrierens von WSE 3.0-Webdiensten zu Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) umfassen verbesserte Leistung und die Unterstützung zusätzlicher Transporte, zusätzlicher Sicherheitsszenarien und WS-Spezifikationen.The benefits of migrating WSE 3.0 Web services to Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) include improved performance and the support of additional transports, additional security scenarios, and WS- specifications. Bei einem Webdienst, der von WSE 3.0 zu WCFWCF migriert wird, kann eine Leistungsverbesserung von bis zu 200 % bis 400 % auftreten.A Web service that is migrated from WSE 3.0 to WCFWCF can experience up to a 200% to 400% performance improvement. Weitere Informationen über die von unterstützten Transporte WCFWCF, finden Sie unter Wählen eines Transports.For more information about the transports supported by WCFWCF, see Choosing a Transport. Eine Liste von unterstützten Szenarien WCFWCF, finden Sie unter häufige Sicherheitsszenarien.For a list of the scenarios supported by WCFWCF, see Common Security Scenarios. Eine Liste der Spezifikationen, die von unterstützt werden WCFWCF, finden Sie unter Handbuch Interoperabilität von Webdienstprotokollen.For a list of the specifications that are supported by WCFWCF, see Web Services Protocols Interoperability Guide.

Die folgenden Abschnitte bieten eine Anleitung für das Migrieren einer bestimmten Funktion eines WSE 3.0-Webdiensts zu WCFWCF.The following sections provide guidance on how to migrate a specific feature of a WSE 3.0 Web service to WCFWCF.

AllgemeinGeneral

WSE 3.0 und WCFWCF-Anwendungen umfassen Interoperabilität auf niedriger Ebene und eine Standardmenge an Terminologie.WSE 3.0 and WCFWCF applications include wire-level interoperability and a common set of terminology. WSE 3.0 und WCFWCF-Anwendungen sind auf niedriger Ebene interoperabel auf der Grundlage eines Satzes von WS-Spezifikationen, den beide unterstützen.WSE 3.0 and WCFWCF applications are wire-level interoperable based on the set of WS- specifications that they both support. Wenn eine WSE 3.0- oder WCFWCF-Anwendung entwickelt wird, gibt es einen Standardsatz an Terminologie, wie die Namen von sofort verwendbaren Sicherheitsassertionen in WSE und die Authentifizierungsmodi.When a WSE 3.0 or WCFWCF application is developed there is a common set of terminology, such as the names of the turnkey security assertions in WSE and the authentication modes.

Obwohl es viele ähnliche Aspekte zwischen den Programmiermodellen von WCFWCF und ASP.NET oder WSE 3.0 gibt, sind sie unterschiedlich.Although there are many similar aspects between the WCFWCF and ASP.NET or WSE 3.0 programming models, they are different. Weitere Informationen zu den WCFWCF Programmiermodell, finden Sie unter grundlegende Programmierung Lebenszyklus.For details about the WCFWCF programming model, see Basic Programming Lifecycle.

Hinweis

WSE-Webdiensts zu WCF Migrieren der ServiceModel Metadata Utility Tool (Svcutil.exe) Tool kann verwendet werden, um einen Client zu generieren.To migrate a WSE Web service to WCF the ServiceModel Metadata Utility Tool (Svcutil.exe) tool can be used to generate a client. Der Client enthält jedoch Schnittstellen und Klassen, die auch als Startpunkt für einen WCF-Dienst verwendet werden können.That client however contains interfaces and classes that can be used as a starting point for a WCF service too. Bei den generierten Schnittstellen wird das OperationContractAttribute-Attribut auf die Member des Vertrags angewendet, wobei die ReplyAction-Eigenschaft auf * festgelegt ist.The interfaces that are generated have the OperationContractAttribute attribute applied to the members of the contract with the ReplyAction property set to *. Wenn ein WSE-Client einen Webdienst mit dieser Einstellung aufruft, wird die folgende Ausnahme ausgelöst: Web.Services3.ResponseProcessingException: WSE910: bei der Verarbeitung einer Antwortnachricht ist ein Fehler aufgetreten, und den Fehler finden Sie in der inneren Ausnahme.When a WSE client calls a Web service with this setting, the following exception is thrown: Web.Services3.ResponseProcessingException: WSE910: An error happened during the processing of a response message, and you can find the error in the inner exception. Um dies abzuschwächen, legen Sie für die ReplyAction-Eigenschaft des OperationContractAttribute-Attributs einen Nicht-null-Wert fest, wie z. B. http://Microsoft.WCF.Documentation/ResponseToOCAMethod.To mitigate this, set the ReplyAction property of the OperationContractAttribute attribute to a non-null value, such as http://Microsoft.WCF.Documentation/ResponseToOCAMethod.

SicherheitSecurity

WSE 3.0-Webdienste, die mit einer Richtliniendatei gesichert werdenWSE 3.0 Web services that are secured using a policy file

WCFWCF-Dienste können mithilfe einer Konfigurationsdatei einen Dienst sichern. Dieser Mechanismus funktioniert ähnlich wie eine WSE 3.0-Richtliniendatei. services can use a configuration file to secure a service and that mechanism is similar to a WSE 3.0 policy file. Wenn Sie in WSE 3.0 einen Webdienst mit einer Richtliniendatei sichern, verwenden Sie entweder eine sofort verwendbare Sicherheitsassertion oder eine benutzerdefinierte Richtlinienassertion.In WSE 3.0 when securing a Web service using a policy file, you use either a turnkey security assertion or a custom policy assertion. Dem Authentifizierungsmodus eines WCFWCF-Sicherheitsbindungselements werden die sofort verwendbaren Sicherheitsassertionen eng zugeordnet.The turnkey security assertions map closely to the authentication mode of a WCFWCF security binding element. Es werden nicht nur die WCFWCF-Authentifizierungsmodi und die sofort verwendbaren WSE 3.0-Sicherheitsassertionen gleich oder ähnlich benannt, sondern sie sichern die Nachrichten unter Verwendung derselben Anmeldeinformationstypen.Not only are the WCFWCF authentication modes and WSE 3.0 turnkey security assertions named the same or similarly, they secure the messages using the same credential types. So wird z. B. wird die sofort verwendbare usernameForCertificate-Sicherheitsassertion in WSE 3.0 dem UsernameForCertificate-Authentifizierungsmodus in WCFWCF zugeordnet.For instance, the usernameForCertificate turnkey security assertion in WSE 3.0 maps to the UsernameForCertificate authentication mode in WCFWCF. Die folgenden Codebeispiele zeigen, wie eine minimale Richtlinie, die die sofort verwendbare usernameForCertificate-Sicherheitsassertion in WSE 3.0 verwendet, einem UsernameForCertificate-Authentifizierungsmodus in WCFWCF in einer benutzerdefinierten Bindung zugeordnet wird.The following code examples demonstrate how a minimal policy that uses the usernameForCertificate turnkey security assertion in WSE 3.0 maps to a UsernameForCertificate authentication mode in WCFWCF in a custom binding.

WSE 3.0WSE 3.0

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

WCFWCF

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

Um die Sicherheitseinstellungen eines WSE 3.0-Webdiensts, die in einer Richtliniendatei festgelegt sind, zu WCFWCF zu migrieren, muss eine benutzerdefinierte Bindung in einer Konfigurationsdatei erstellt und die sofort anwendbare Sicherheitsassertion auf den entsprechenden Authentifizierungsmodus festgelegt werden.To migrate the security settings of a WSE 3.0 Web service that are specified in a policy file to WCFWCF, a custom binding must be created in a configuration file and the turnkey security assertion must be set to its equivalent authentication mode. Darüber hinaus muss die benutzerdefinierte Bindung für die Verwendung der WS-Adressing-Spezifikation vom August 2004 konfiguriert werden, wenn WSE 3.0-Clients mit dem Dienst kommunizieren.Additionally, the custom binding must be configured to use the August 2004 WS-Addressing specification when WSE 3.0 clients communicate with the service. Wenn der migrierte WCFWCF-Dienst keine Kommunikation mit WSE 3.0-Clients erfordert und nur die Sicherheitsparität verwalten muss, sollten Sie die systemdefinierten WCFWCF-Bindungen mit entsprechenden Sicherheitseinstellungen verwenden, statt eine benutzerdefinierte Bindung zu erstellen.When the migrated WCFWCF service does not require communication with WSE 3.0 clients and must only maintain security parity, consider using the WCFWCF system-defined bindings with appropriate security settings instead of creating a custom binding.

In der folgenden Tabelle ist die Zuordnung zwischen einer WSE 3.0-Richtliniendatei und der entsprechenden benutzerdefinierten Bindung in WCFWCF aufgelistet.The following table lists the mapping between a WSE 3.0 policy file and the equivalent custom binding in WCFWCF.

Sofort verwendbare WSE 3.0 SicherheitsassertionWSE 3.0 Turnkey Security Assertion Konfiguration einer benutzerdefinierten WCF-BindungWCF custom binding configuration
<UsernameOverTransportSecurity / ><usernameOverTransportSecurity /> <customBinding> <binding name="MyBinding"> <security authenticationMode="UserNameOverTransport" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
<mutualCertificate10Security / ><mutualCertificate10Security /> <customBinding> <binding name="MyBinding"> <security messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" authenticationMode="MutualCertificate" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
<UsernameForCertificateSecurity / ><usernameForCertificateSecurity /> <customBinding> <binding name="MyBinding"> <security authenticationMode="UsernameForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
<AnonymousForCertificateSecurity / ><anonymousForCertificateSecurity /> <customBinding> <binding name="MyBinding"> <security authenticationMode="AnonymousForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
<KerberosSecurity / ><kerberosSecurity /> <customBinding> <binding name="MyBinding"> <security authenticationMode="Kerberos"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
<mutualCertificate11Security / ><mutualCertificate11Security /> <customBinding> <binding name="MyBinding"> <security authenticationMode="MutualCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>

Weitere Informationen zum Erstellen benutzerdefinierter Bindungen in WCF finden Sie unter benutzerdefinierte Bindungen.For more information about creating custom bindings in WCF, see Custom Bindings.

WSE 3.0-Webdienste, die mit einem Anwendungscode gesichert werdenWSE 3.0 Web services that are secured using application code

Unabhängig davon, ob WSE 3.0 oder WCFWCF verwendet wird, können die Sicherheitsanforderungen im Anwendungscode statt in der Konfiguration festgelegt werden.Whether WSE 3.0 or WCFWCF is used, the security requirements can be specified in application code instead of in configuration. Bei WSE 3.0 wird dies durch Erstellen einer Klasse, die sich von der Policy-Klasse ableitet, und dann durch Hinzufügen der Anforderungen durch Aufrufen der Add-Methode erreicht.In WSE 3.0, this is accomplished by creating a class that derives from the Policy class and then by adding the requirements by calling the Add method. Weitere Informationen zu die sicherheitsanforderungen im Code angeben, finden Sie unter Vorgehensweise: Sichern einer Web-Dienst ohne Verwendung einer Richtliniendatei.For more details about specifying the security requirements in code, see How to: Secure a Web Service Without Using a Policy File. Um bei WCFWCF Sicherheitsanforderungen im Code festzulegen, erstellen Sie eine Instanz der BindingElementCollection-Klasse und fügen eine Instanz eines SecurityBindingElement zu der BindingElementCollection hinzu.In WCFWCF, to specify security requirements in code, create an instance of the BindingElementCollection class and add an instance of a SecurityBindingElement to the BindingElementCollection. Die Anforderungen an die Sicherheitsassertionen werden mit den statischen Hilfsmethoden des Authentifizierungsmodus der SecurityBindingElement-Klasse festgelegt.The security assertion requirements are set using the static authentication mode helper methods of the SecurityBindingElement class. Ausführliche Informationen zur Angabe von sicherheitsanforderungen im Code mit WCFWCF, finden Sie unter wie: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement und wie: Erstellen eines SecurityBindingElement für einen Angegebene Authentifizierungsmodus.For more details about specifying security requirements in code using WCFWCF, see How to: Create a Custom Binding Using the SecurityBindingElement and How to: Create a SecurityBindingElement for a Specified Authentication Mode.

Benutzerdefinierte WSE 3.0-RichtlinienassertionWSE 3.0 Custom Policy Assertion

Bei WSE 3.0 gibt es zwei Typen von benutzerdefinierten Richtlinienassertionen: solche, die eine SOAP-Nachricht sichern, und solche, die keine SOAP-Nachricht sichern.In WSE 3.0 there are two types of custom policy assertions: those that secure a SOAP message and those that do not secure a SOAP message. Richtlinienassertionen, die SOAP-Nachrichten sichern, werden von der WSE 3.0-SecurityPolicyAssertion-Klasse abgeleitet. Das konzeptuelle Äquivalent in WCFWCF ist die SecurityBindingElement-Klasse.Policy assertions that secure SOAP messages derive from WSE 3.0 SecurityPolicyAssertion class and the conceptual equivalent in WCFWCF is the SecurityBindingElement class.

Beachten Sie unbedingt, dass die sofort anwendbaren WSE 3.0-Sicherheitsassertionen eine Teilmenge der WCFWCF-Authentifizierungsmodi sind.An important point to note is that the WSE 3.0 turnkey security assertions are a subset of the WCFWCF authentication modes. Wenn Sie in WSE 3.0 eine benutzerdefinierte Richtlinienassertion erstellt haben, kann es einen entsprechenden WCFWCF-Authentifizierungsmodus geben.If you have created a custom policy assertion in WSE 3.0, there may be an equivalent WCFWCF authentication mode. WSE 3.0 stellt z. B. keine CertificateOverTransport-Sicherheitsassertion bereit, die der sofort anwendbaren UsernameOverTransport-Sicherheitsassertion entspricht, verwendet aber ein X.509-Zertifikat für Clientauthentifizierungszwecke.For example, WSE 3.0 does not provide a CertificateOverTransport security assertion that is the equivalent to UsernameOverTransport turnkey security assertion, but uses an X.509 certificate for client authentication purposes. Wenn Sie eine eigene benutzerdefinierte Richtlinienassertion für dieses Szenario festgelegt haben, ist die Migration mit WCFWCF ganz einfach.If you have defined your own custom policy assertion for this scenario, WCFWCF makes the migration straightforward. WCFWCF definiert einen Authentifizierungsmodus für dieses Szenario, sodass Sie die statischen Hilfsmethoden des Authentifizierungsmodus zum Konfigurieren eines WCFWCFSecurityBindingElement verwenden können. defines an authentication mode for this scenario, so you can take advantage of the static authentication mode helper methods to configure a WCFWCFSecurityBindingElement.

Wenn kein WCFWCF-Authentifizierungsmodus vorhanden ist, der einer benutzerdefinierten Richtlinienassertion entspricht, die SOAP-Nachrichten sichert, leiten Sie eine Klasse aus den TransportSecurityBindingElement-, SymmetricSecurityBindingElement- oder AsymmetricSecurityBindingElementWCFWCF-Klassen ab, und legen Sie das entsprechende Bindungselement fest.When there is not a WCFWCF authentication mode that is equivalent to a custom policy assertion that secures SOAP messages, derive a class from TransportSecurityBindingElement, SymmetricSecurityBindingElement or AsymmetricSecurityBindingElementWCFWCF classes and specify the equivalent binding element. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement.For more details, see How to: Create a Custom Binding Using the SecurityBindingElement.

Um eine benutzerdefinierte Richtlinienassertion zu konvertieren, die keine SOAP-Nachricht gesichert wird, finden Sie unter Filtering und im Beispiel benutzerdefinierte Nachrichteninterceptor.To convert a custom policy assertion that does not secure a SOAP message, see Filtering and the sample Custom Message Interceptor.

Benutzerdefiniertes WSE 3.0 SicherheitstokenWSE 3.0 Custom Security Token

Das WCFWCF-Programmiermodell zum Erstellen eines benutzerdefinierten Tokens unterscheidet sich von dem in WSE 3.0.The WCFWCF programming model for creating a custom token is different than WSE 3.0. Ausführliche Informationen zum Erstellen eines benutzerdefinierten Tokens in WSE finden Sie unter benutzerdefiniertes Sicherheitstoken erstellen.For details about creating a custom token in WSE, see Creating Custom Security Tokens. Ausführliche Informationen zum Erstellen eines benutzerdefinierten Tokens in WCFWCF, finden Sie unter Vorgehensweise: Erstellen eines benutzerdefinierten Tokens.For details about creating a custom token in WCFWCF, see How to: Create a Custom Token.

Benutzerdefinierter WSE 3.0 Token-ManagerWSE 3.0 Custom Token Manager

Das Programmiermodell zum Erstellen eines benutzerdefinierten Token-Managers in WCFWCF unterscheidet sich von dem in WSE 3.0.The programming model for creating a custom token manager is different in WCFWCF than WSE 3.0. Ausführliche Informationen zum Erstellen einer benutzerdefinierten Sicherheitstoken-Manager und die anderen Komponenten, die für ein benutzerdefiniertes Sicherheitstoken erforderlich sind, finden Sie unter Vorgehensweise: Erstellen eines benutzerdefinierten Tokens.For details about how to create a custom token manager and the other components that are required for a custom security token, see How to: Create a Custom Token.

Hinweis

Wenn Sie einen benutzerdefinierten UsernameToken-Sicherheitstoken-Manager erstellt haben, stellt WCFWCF einen einfacheren Mechanismus zur Verfügung, um die Authentifizierungslogik festzulegen, als das Erstellen eines benutzerdefinierten Sicherheitstoken-Managers.If you have created a custom UsernameToken security token manager, WCFWCF provides an easier mechanism to specify the authentication logic than creating a custom security token manager. Weitere Informationen finden Sie unter Vorgehensweise: Verwenden Sie einen benutzerdefinierten-Benutzernamen und Kennwort-Validierungssteuerelement.For more details, see How to: Use a Custom User Name and Password Validator.

WSE 3.0-Webdienste, die MTOM-codierte SOAP-Nachrichten verwendenWSE 3.0 Web services that use MTOM encoded SOAP messages

Wie eine WSE 3-Anwendung kann eine WCFWCF-Anwendung die MTOM-Nachrichtencodierung in der Konfiguration festlegen.Like a WSE 3 application, a WCFWCF application can specify the MTOM message encoding in configuration. Fügen Sie zum Migrieren dieser Einstellung die <MtomMessageEncoding > der Bindung für den Dienst.To migrate this setting, add the <mtomMessageEncoding> to the binding for the service. Im folgenden Codebeispiel wird veranschaulicht, wie eine MTOM-Codierung in WSE 3.0 für einen Dienst festgelegt wird, der WCFWCF entspricht.The following code example demonstrates how MTOM encoding is specified in WSE 3.0 for a service that is equivalent in WCFWCF.

WSE 3.0WSE 3.0

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

WCFWCF

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

MessagingMessaging

WSE 3.0-Anwendungen, die die WSE-Messaging-API verwendenWSE 3.0 Applications that use the WSE Messaging API

Wenn die WSE-Messaging-API verwendet wird, um direkten Zugriff auf die XML zu erhalten, die zwischen dem Client und dem Webdienst kommuniziert wird, kann die Anwendung so umgewandelt werden, dass sie "Plain Old XML" (POX) verwendet.When the WSE Messaging API is used to gain direct access to the XML that is communicated between the client and Web service, the application can be converted to use "Plain Old XML" (POX). Weitere Informationen zu POX, finden Sie unter Interoperabilität mit POX-Anwendungen.For more details about POX, see Interoperability with POX Applications. Weitere Informationen über die WSE-Messaging-API finden Sie unter senden und Empfangen von SOAP-Nachrichten mithilfe von WSE-Messaging-API.For more details about the WSE Messaging API, see Sending and Receiving SOAP Messages Using WSE Messaging API.

TransportprotokolleTransports

TCPTCP

Standardmäßig interoperieren WSE 3.0-Clients und -Webdienste, die SOAP-Nachrichten mittels TCP-Transport senden, nicht mit WCFWCF-Clients und -Webdiensten.By default, WSE 3.0 clients and Web services that send SOAP messages using the TCP transport do not interoperate with WCFWCF clients and Web services. Diese Inkompatibilität beruht auf Unterschieden in dem im TCP-Protokoll verwendeten Rahmen und auf Leistungsgründen.This incompatibility is due to differences in the framing used in the TCP protocol and for performance reasons. Ein WCFWCF-Beispiel veranschaulicht, wie eine benutzerdefinierte TCP-Sitzung implementiert wird, die mit WSE 3.0 zusammenwirkt.However, a WCFWCF sample details how to implement a custom TCP session that interoperates with WSE 3.0. Einzelheiten zu diesem Beispiel finden Sie unter Transport: WSE 3.0-TCP-Interoperabilität.For details about this sample, see Transport: WSE 3.0 TCP Interoperability.

Um anzugeben, dass eine WCFWCF Anwendung verwendet den TCP-Transport, verwenden Sie die <NetTcpBinding >.To specify that a WCFWCF application uses the TCP transport, use the <netTcpBinding>.

Benutzerdefinierter TransportCustom Transport

Die Entsprechung eines benutzerdefinierten WSE 3.0-Transports in WCFWCF ist eine Kanalerweiterung.The equivalent of a WSE 3.0 custom transport in WCFWCF is a channel extension. Ausführliche Informationen zum Erstellen einer kanalerweiterung finden Sie unter Erweitern der Kanalschicht.For details about creating a channel extension, see Extending the Channel Layer.

Siehe auchSee Also

Grundlegender ProgrammierlebenszyklusBasic Programming Lifecycle
Benutzerdefinierte BindungenCustom Bindings
Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElementHow to: Create a Custom Binding Using the SecurityBindingElement
Vorgehensweise: Erstellen eines SecurityBindingElement für einen angegebenen AuthentifizierungsmodusHow to: Create a SecurityBindingElement for a Specified Authentication Mode