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

Migrieren von WSE 3.0-Webdiensten, Windows Communication Foundation (WCF) Vorteile 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) include improved performance and the support of additional transports, additional security scenarios, and WS-* specifications. Ein Webdienst, der von WSE 3.0 zu WCF migriert wird, kann bis zu 200 % bis 400 % verbessert die Leistung auftreten.A Web service that is migrated from WSE 3.0 to WCF can experience up to a 200% to 400% performance improvement. Weitere Informationen zu den von WCF unterstützten Transporte, finden Sie unter Wählen eines Transports.For more information about the transports supported by WCF, see Choosing a Transport. Eine Liste der von WCF unterstützten Szenarien finden Sie häufige Sicherheitsszenarien.For a list of the scenarios supported by WCF, see Common Security Scenarios. Eine Liste der Spezifikationen, die von WCF unterstützt werden, finden Sie unter Handbuch Interoperabilität von Webdienstprotokollen.For a list of the specifications that are supported by WCF, see Web Services Protocols Interoperability Guide.

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

AllgemeinGeneral

WSE 3.0- und WCF-Anwendungen umfassen Interoperabilität auf niedriger Ebene und eine Standardmenge an Terminologie.WSE 3.0 and WCF applications include wire-level interoperability and a common set of terminology. WSE 3.0- und WCF-Anwendungen sind auf niedriger Ebene interoperabel basierend auf den Satz von WS-* Spezifikationen, die beide unterstützen.WSE 3.0 and WCF applications are wire-level interoperable based on the set of WS-* specifications that they both support. Wenn eine WSE 3.0- oder WCF-Anwendung entwickelt wird wird eine Standardmenge an Terminologie, wie die Namen der Sicherheitsassertionen in WSE und die Authentifizierungsmodi.When a WSE 3.0 or WCF 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 viele ähnliche zwischen WCF und ASP.NET Aspekte oder WSE 3.0 Programmiermodelle, sind sie unterschiedlich.Although there are many similar aspects between the WCF and ASP.NET or WSE 3.0 programming models, they are different. Weitere Informationen zu den WCF-Programmiermodell, finden Sie unter grundlegende Programmierung Lebenszyklus.For details about the WCF 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

WCF-Dienste können eine Konfigurationsdatei verwenden, um einen Dienst sichern, und dieser Mechanismus funktioniert ähnlich wie eine WSE 3.0-Richtliniendatei.WCF 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. Die Sicherheitsassertionen sind nahezu deckungsgleich mit den Authentifizierungsmodus eines Bindungselements einer WCF-Sicherheit.The turnkey security assertions map closely to the authentication mode of a WCF security binding element. Nicht nur die WCF-Authentifizierungsmodi und WSE 3.0-Sicherheitsassertionen die denselben Namen, oder auf ähnliche Weise sichern sie die Nachrichten, die mit derselben Anmeldeinformationstypen.Not only are the WCF authentication modes and WSE 3.0 turnkey security assertions named the same or similarly, they secure the messages using the same credential types. Für die Instanz, die usernameForCertificate -sicherheitsassertion in WSE 3.0 ordnet die UsernameForCertificate in WCF-Authentifizierungsmodus.For instance, the usernameForCertificate turnkey security assertion in WSE 3.0 maps to the UsernameForCertificate authentication mode in WCF. Die folgenden Codebeispiele zeigen, wie eine minimale Richtlinie, die verwendet die usernameForCertificate -sicherheitsassertion in WSE 3.0 ordnet eine UsernameForCertificate Authentifizierungsmodus in WCF in einer benutzerdefinierten Bindung.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 WCF 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 zu migrieren, die in einer Richtliniendatei WCF angegeben sind, muss eine benutzerdefinierte Bindung in einer Konfigurationsdatei erstellt werden, und die sicherheitsassertion muss 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 WCF, 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 WCF-Dienst keine Kommunikation mit WSE 3.0-Clients erfordert und nur die sicherheitsparität verwalten muss, sollten Sie die vordefinierten WCF-Bindungen mit entsprechenden Sicherheitseinstellungen fest, statt eine benutzerdefinierte Bindung zu erstellen.When the migrated WCF service does not require communication with WSE 3.0 clients and must only maintain security parity, consider using the WCF system-defined bindings with appropriate security settings instead of creating a custom binding.

Die folgende Tabelle enthält die Zuordnung zwischen einer WSE 3.0-Richtliniendatei und der entsprechenden benutzerdefinierten Bindung in WCF.The following table lists the mapping between a WSE 3.0 policy file and the equivalent custom binding in WCF.

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

Ob WSE 3.0- oder WCF verwendet wird, können die sicherheitsanforderungen im Anwendungscode statt in der Konfiguration angegeben werden.Whether WSE 3.0 or WCF 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. In WCF, um sicherheitsanforderungen im Code anzugeben, erstellen eine Instanz von der BindingElementCollection Klasse und fügen Sie eine Instanz von einer SecurityBindingElement auf die BindingElementCollection.In WCF, 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 mithilfe von WCF finden Sie unter Vorgehensweise: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement und Vorgehensweise: Erstellen eines SecurityBindingElement für eine angegebene Authentifizierungsmodus.For more details about specifying security requirements in code using WCF, 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 von WSE 3.0 ableiten SecurityPolicyAssertion Klasse und das konzeptuelle Äquivalent in WCF ist das SecurityBindingElement Klasse.Policy assertions that secure SOAP messages derive from WSE 3.0 SecurityPolicyAssertion class and the conceptual equivalent in WCF is the SecurityBindingElement class.

Ein wichtiger Punkt zu beachten ist, dass die WSE 3.0-Sicherheitsassertionen eine Teilmenge der WCF-Authentifizierungsmodi sind.An important point to note is that the WSE 3.0 turnkey security assertions are a subset of the WCF authentication modes. Wenn Sie eine benutzerdefinierte Richtlinienassertion in WSE 3.0 erstellt haben, es gibt möglicherweise ein äquivalente WCF-Authentifizierungsmodus.If you have created a custom policy assertion in WSE 3.0, there may be an equivalent WCF 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 definiert haben, vereinfacht WCF die Migration.If you have defined your own custom policy assertion for this scenario, WCF makes the migration straightforward. WCF definiert einen Authentifizierungsmodus für dieses Szenario, sodass Sie bei der Authentifizierung statische Hilfsmethoden zum Konfigurieren eines WCFS nutzen könnenSecurityBindingElement.WCF defines an authentication mode for this scenario, so you can take advantage of the static authentication mode helper methods to configure a WCFSecurityBindingElement.

Wenn kein WCF-Authentifizierungsmodus, der eine benutzerdefinierte Richtlinienassertion entspricht, die SOAP-Nachrichten sichert, leiten Sie eine Klasse von TransportSecurityBindingElement, SymmetricSecurityBindingElement oder AsymmetricSecurityBindingElementWCF-Klassen, und geben Sie das entsprechende Bindungselement.When there is not a WCF authentication mode that is equivalent to a custom policy assertion that secures SOAP messages, derive a class from TransportSecurityBindingElement, SymmetricSecurityBindingElement or AsymmetricSecurityBindingElementWCF 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 WCF-Programmiermodell zum Erstellen eines benutzerdefinierten Tokens unterscheidet sich von WSE 3.0.The WCF 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 WCF finden Sie unter Vorgehensweise: Erstellen eines benutzerdefinierten Tokens.For details about creating a custom token in WCF, see How to: Create a Custom Token.

Benutzerdefinierter WSE 3.0 Token-ManagerWSE 3.0 Custom Token Manager

Das Programmiermodell zum Erstellen eines benutzerdefinierten Sicherheitstoken-Managers unterscheidet sich in WCF als WSE 3.0.The programming model for creating a custom token manager is different in WCF 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 eine benutzerdefinierte erstellt haben UsernameToken sicherheitstokenmanager WCF bietet einen einfacheren Mechanismus zum Angeben der Authentifizierungslogik als Erstellen eines benutzerdefinierten Sicherheitstoken-Manager.If you have created a custom UsernameToken security token manager, WCF 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

Eine WCF-Anwendung kann die MTOM-nachrichtencodierung in der Konfiguration angeben, wie eine WSE 3-Anwendung.Like a WSE 3 application, a WCF 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 MTOM-Codierung in WSE 3.0 für einen Dienst angegeben wird, die in WCF entspricht.The following code example demonstrates how MTOM encoding is specified in WSE 3.0 for a service that is equivalent in WCF.

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 zusammenarbeiten WSE 3.0-Clients und Webdienste, die SOAP-Nachrichten mittels TCP-Transport senden nicht mit WCF-Clients und Webdiensten.By default, WSE 3.0 clients and Web services that send SOAP messages using the TCP transport do not interoperate with WCF 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 WCF-Beispiel wird jedoch erläutert, wie eine benutzerdefinierte TCP-Sitzung zu implementieren, die mit WSE 3.0 zusammenwirkt.However, a WCF 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.

Verwenden, um anzugeben, dass eine WCF-Anwendung über den TCP-Transport verwendet die <NetTcpBinding >.To specify that a WCF application uses the TCP transport, use the <netTcpBinding>.

Benutzerdefinierter TransportCustom Transport

Die Entsprechung eines benutzerdefinierten WSE 3.0-Transports in WCF ist eine kanalerweiterung.The equivalent of a WSE 3.0 custom transport in WCF 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