Migrieren von WSE 3.0-Webdiensten zu WCF

Die Vorteile des Migrierens von WSE 3.0-Webdiensten zu Windows Communication Foundation (WCF) umfassen verbesserte Leistung und die Unterstützung zusätzlicher Transporte, zusätzlicher Sicherheitsszenarien und WS-*Spezifikationen. Bei einem Webdienst, der von WSE 3.0 zu WCF migriert wird, kann eine Leistungsverbesserung von bis zu 200 % bis 400 % auftreten. Weitere Informationen über die Transporte, die von unterstützten WCF, finden Sie unter Wählen eines Transports. Eine Liste von unterstützten Szenarien WCF, finden Sie unter häufige Sicherheitsszenarios. Eine Liste der Spezifikationen, die von unterstützten WCF, finden Sie unter Handbuch für die Interoperabilität von Web Services Protokolle.

Die folgenden Abschnitte bieten eine Anleitung für das Migrieren einer bestimmten Funktion eines WSE 3.0-Webdiensts zu WCF.

Allgemein

WSE 3.0 und WCF-Anwendungen umfassen Interoperabilität auf niedriger Ebene und eine Standardmenge an Terminologie. WSE 3.0 und WCF-Anwendungen sind auf niedriger Ebene interoperabel auf der Grundlage eines Satzes von WS-*Spezifikationen, den beide unterstützen. Wenn eine WSE 3.0- oder WCF-Anwendung entwickelt wird, gibt es einen Standardsatz an Terminologie, wie die Namen von sofort verwendbaren Sicherheitsassertionen in WSE und die Authentifizierungsmodi.

Obwohl es viele ähnliche Aspekte zwischen den Programmiermodellen von WCF und ASP.NET oder WSE 3.0 gibt, sind sie unterschiedlich. Weitere Informationen zu den WCF Programmiermodell, finden Sie unter grundlegende Programmierung Lebenszyklus.

Hinweis

So migrieren einen WSE-Webdienst zu WCF die ServiceModel Metadata Utility Tool (Svcutil.exe) Tool zum Generieren eines Clients verwendet werden kann. Der Client enthält jedoch Schnittstellen und Klassen, die auch als Startpunkt für einen WCF-Dienst verwendet werden können. Die Schnittstellen, die generiert werden, haben die OperationContractAttribute -Attribut angewendet wird, die Member des Vertrags mit der ReplyAction Eigenschaft festgelegt, um *. Wenn ein WSE-Client einen Webdienst mit dieser Einstellung aufruft, wird die folgende Ausnahme ausgelöst: Web.Services3.ResponseProcessingException: WSE910: während der Verarbeitung einer Antwortnachricht ist ein Fehler aufgetreten, und Sie können die Fehler in der inneren Ausnahme suchen. Um dies zu vermeiden, legen Sie die ReplyAction Eigenschaft der OperationContractAttribute -Attributs einen nicht-null Wert, z. B. http://Microsoft.WCF.Documentation/ResponseToOCAMethod.

Sicherheit

WSE 3.0-Webdienste, die mit einer Richtliniendatei gesichert werden

WCF-Dienste können mithilfe einer Konfigurationsdatei einen Dienst sichern. Dieser Mechanismus funktioniert ähnlich wie eine WSE 3.0-Richtliniendatei. Wenn Sie in WSE 3.0 einen Webdienst mit einer Richtliniendatei sichern, verwenden Sie entweder eine sofort verwendbare Sicherheitsassertion oder eine benutzerdefinierte Richtlinienassertion. Dem Authentifizierungsmodus eines WCF-Sicherheitsbindungselements werden die sofort verwendbaren Sicherheitsassertionen eng zugeordnet. Es werden nicht nur die WCF-Authentifizierungsmodi und die sofort verwendbaren WSE 3.0-Sicherheitsassertionen gleich oder ähnlich benannt, sondern sie sichern die Nachrichten unter Verwendung derselben Anmeldeinformationstypen. So wird z. B. wird die sofort verwendbare usernameForCertificate-Sicherheitsassertion in WSE 3.0 dem UsernameForCertificate-Authentifizierungsmodus in WCF zugeordnet. Die folgenden Codebeispiele zeigen, wie eine minimale Richtlinie, die die sofort verwendbare usernameForCertificate-Sicherheitsassertion in WSE 3.0 verwendet, einem UsernameForCertificate-Authentifizierungsmodus in WCF in einer benutzerdefinierten Bindung zugeordnet wird.

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>  

Um die Sicherheitseinstellungen eines WSE 3.0-Webdiensts, die in einer Richtliniendatei festgelegt sind, zu WCF zu migrieren, muss eine benutzerdefinierte Bindung in einer Konfigurationsdatei erstellt und die sofort anwendbare Sicherheitsassertion auf den entsprechenden Authentifizierungsmodus festgelegt werden. 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. Wenn der migrierte WCF-Dienst keine Kommunikation mit WSE 3.0-Clients erfordert und nur die Sicherheitsparität verwalten muss, sollten Sie die systemdefinierten WCF-Bindungen mit entsprechenden Sicherheitseinstellungen verwenden, statt eine benutzerdefinierte Bindung zu erstellen.

In der folgenden Tabelle ist die Zuordnung zwischen einer WSE 3.0-Richtliniendatei und der entsprechenden benutzerdefinierten Bindung in WCF aufgelistet.

Sofort verwendbare WSE 3.0 Sicherheitsassertion Konfiguration einer benutzerdefinierten WCF-Bindung
> <customBinding> <binding name="MyBinding"> <security authenticationMode="UserNameOverTransport" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
> <customBinding> <binding name="MyBinding"> <security messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" authenticationMode="MutualCertificate" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
> <customBinding> <binding name="MyBinding"> <security authenticationMode="UsernameForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
> <customBinding> <binding name="MyBinding"> <security authenticationMode="AnonymousForCertificate"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
> <customBinding> <binding name="MyBinding"> <security authenticationMode="Kerberos"/> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding>
> <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.

WSE 3.0-Webdienste, die mit einem Anwendungscode gesichert werden

Unabhängig davon, ob WSE 3.0 oder WCF verwendet wird, können die Sicherheitsanforderungen im Anwendungscode statt in der Konfiguration festgelegt werden. 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. Weitere Informationen zu die sicherheitsanforderungen im Code angeben, finden Sie unter Gewusst wie: Sichern einer Webdiensts ohne Verwendung einer Richtliniendatei. In WCFsicherheitsanforderungen im Code festzulegen, erstellen Sie eine Instanz von der BindingElementCollection -Klasse und das Hinzufügen einer Instanz von einer SecurityBindingElement an der BindingElementCollection. Anforderungen an die Sicherheitsassertionen festgelegt werden, werden Hilfsmethoden der statischen Authentifizierungsmodus für die SecurityBindingElement Klasse. Ausführliche Informationen zum Festlegen von sicherheitsanforderungen im Code mithilfe WCF, finden Sie unter Gewusst wie: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement und Gewusst wie: Erstellen eines SecurityBindingElement für einen angegebenen Authentifizierungsmodus.

Benutzerdefinierte WSE 3.0-Richtlinienassertion

Bei WSE 3.0 gibt es zwei Typen von benutzerdefinierten Richtlinienassertionen: solche, die eine SOAP-Nachricht sichern, und solche, die keine SOAP-Nachricht sichern. Leiten Sie Policy-Assertionen, die SOAP-Nachrichten Sichern von WSE 3.0 SecurityPolicyAssertion -Klasse und das konzeptuelle Äquivalent in WCF ist die SecurityBindingElement Klasse.

Beachten Sie unbedingt, dass die sofort anwendbaren WSE 3.0-Sicherheitsassertionen eine Teilmenge der WCF-Authentifizierungsmodi sind. Wenn Sie in WSE 3.0 eine benutzerdefinierte Richtlinienassertion erstellt haben, kann es einen entsprechenden WCF-Authentifizierungsmodus geben. 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. Wenn Sie eine eigene benutzerdefinierte Richtlinienassertion für dieses Szenario festgelegt haben, ist die Migration mit WCF ganz einfach. WCFdefiniert einen Authentifizierungsmodus für dieses Szenario, damit Sie den Authentifizierungsmodus für die statischen Hilfsmethoden konfigurieren nutzen können eine WCF SecurityBindingElement.

Wenn keine WCF -Authentifizierungsmodus, der eine benutzerdefinierte Richtlinienassertion entspricht, die SOAP-Nachrichten sichert, leiten eine Klasse von TransportSecurityBindingElement, SymmetricSecurityBindingElement oder AsymmetricSecurityBindingElement WCF Klassen, und geben Sie das entsprechende Bindungselement. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement.

Um eine benutzerdefinierte Richtlinienassertion zu konvertieren, die nicht über eine SOAP-Nachricht sichert, finden Sie unter filtern und im Beispiel benutzerdefinierte Nachrichteninterceptor.

Benutzerdefiniertes WSE 3.0 Sicherheitstoken

Das WCF-Programmiermodell zum Erstellen eines benutzerdefinierten Tokens unterscheidet sich von dem in WSE 3.0. Ausführliche Informationen zum Erstellen eines benutzerdefinierten Tokens in WSE finden Sie unter Erstellen benutzerdefinierter Sicherheitstoken. Ausführliche Informationen zum Erstellen eines benutzerdefinierten Tokens in WCF, finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Tokens.

Benutzerdefinierter WSE 3.0 Token-Manager

Das Programmiermodell zum Erstellen eines benutzerdefinierten Token-Managers in WCF unterscheidet sich von dem in WSE 3.0. Ausführliche Informationen zum Erstellen einer benutzerdefinierten Sicherheitstoken-Manager und andere Komponenten, die für ein benutzerdefiniertes Sicherheitstoken erforderlich sind, finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Tokens.

Hinweis

Wenn Sie einen benutzerdefinierten UsernameToken-Sicherheitstoken-Manager erstellt haben, stellt WCF einen einfacheren Mechanismus zur Verfügung, um die Authentifizierungslogik festzulegen, als das Erstellen eines benutzerdefinierten Sicherheitstoken-Managers. Weitere Informationen finden Sie unter Gewusst wie: Verwenden Sie einen benutzerdefinierten Namen und Kennwort-Validierungssteuerelement.

WSE 3.0-Webdienste, die MTOM-codierte SOAP-Nachrichten verwenden

Wie eine WSE 3-Anwendung kann eine WCF-Anwendung die MTOM-Nachrichtencodierung in der Konfiguration festlegen. Um diese Einstellung zu migrieren, fügen die <> > der Bindung für den Dienst. Im folgenden Codebeispiel wird veranschaulicht, wie eine MTOM-Codierung in WSE 3.0 für einen Dienst festgelegt wird, der WCF entspricht.

WSE 3.0

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

WCF

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

Messaging

WSE 3.0-Anwendungen, die die WSE-Messaging-API verwenden

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. Weitere Einzelheiten über POX finden Sie unter Interoperabilität mit POX-Anwendungen. Weitere Informationen über die WSE-Messaging-API finden Sie unter senden und Empfangen von SOAP-Nachrichten mithilfe von WSE-Messaging-API.

Transportprotokolle

TCP

Standardmäßig interoperieren WSE 3.0-Clients und -Webdienste, die SOAP-Nachrichten mittels TCP-Transport senden, nicht mit WCF-Clients und -Webdiensten. Diese Inkompatibilität beruht auf Unterschieden in dem im TCP-Protokoll verwendeten Rahmen und auf Leistungsgründen. Ein WCF-Beispiel veranschaulicht, wie eine benutzerdefinierte TCP-Sitzung implementiert wird, die mit WSE 3.0 zusammenwirkt. Weitere Informationen zu diesem Beispiel finden Sie unter Transport: WSE 3.0-TCP-Interoperabilität.

Um anzugeben, dass ein WCF Anwendung verwendet den TCP-Transport, mit der <> </> > .

Benutzerdefinierter Transport

Die Entsprechung eines benutzerdefinierten WSE 3.0-Transports in WCF ist eine Kanalerweiterung. Weitere Informationen zum Erstellen einer kanalerweiterung finden Sie unter Erweitern der Kanalschicht.

Siehe auch

Grundlegender Programmierlebenszyklus
Benutzerdefinierte Bindungen
Gewusst wie: Erstellen einer benutzerdefinierten Bindung mit dem SecurityBindingElement
Gewusst wie: Erstellen eines SecurityBindingElement für einen angegebenen Authentifizierungsmodus