Delen via


WSE 3.0-webservices migreren naar WCF

De voordelen van het migreren van WSE 3.0-webservices naar Windows Communication Foundation (WCF) omvatten verbeterde prestaties en ondersteuning van extra transporten, aanvullende beveiligingsscenario's en WS-*-specificaties. Een webservice die wordt gemigreerd van WSE 3.0 naar WCF kan tot 200% tot 400% prestatieverbetering ervaren. Zie Een transport kiezen voor meer informatie over de transporten die door WCF worden ondersteund. Zie Algemene beveiligingsscenario's voor een lijst met scenario's die worden ondersteund door WCF. Zie de handleiding voor interoperabiliteit van webservicesprotocollen voor een lijst met specificaties die worden ondersteund door WCF.

De volgende secties bevatten richtlijnen voor het migreren van een specifieke functie van een WSE 3.0-webservice naar WCF.

Algemeen

WSE 3.0- en WCF-toepassingen omvatten interoperabiliteit op draadniveau en een algemene set terminologie. WSE 3.0- en WCF-toepassingen zijn interoperabel op draadniveau op basis van de set WS-* specificaties die beide worden ondersteund. Wanneer een WSE 3.0- of WCF-toepassing is ontwikkeld, is er een algemene set terminologie, zoals de namen van de kant-en-klare beveiligingsverklaringen in WSE en de verificatiemodi.

Hoewel er veel vergelijkbare aspecten zijn tussen de WCF- en ASP.NET- of WSE 3.0-programmeermodellen, zijn ze verschillend. Zie Basic Programming Lifecycle voor meer informatie over het WCF-programmeermodel.

Notitie

Als u een WSE-webservice wilt migreren naar WCF, kan het hulpprogramma Hulpprogramma voor metagegevens van servicemodel (Svcutil.exe) worden gebruikt om een client te genereren. Deze client bevat echter ook interfaces en klassen die kunnen worden gebruikt als uitgangspunt voor een WCF-service. De interfaces die worden gegenereerd, hebben het OperationContractAttribute kenmerk toegepast op de leden van het contract waarop de ReplyAction eigenschap is ingesteld *. Wanneer een WSE-client een webservice aanroept met deze instelling, wordt de volgende uitzondering gegenereerd: Web.Services3.ResponseProcessingException: WSE910: Er is een fout opgetreden tijdens het verwerken van een antwoordbericht en u kunt de fout in de interne uitzondering vinden. U kunt dit verhelpen door de ReplyAction eigenschap van het OperationContractAttribute kenmerk in te stellen op een niet-waardenull , zoals http://Microsoft.WCF.Documentation/ResponseToOCAMethod.

Beveiliging

WSE 3.0-webservices die zijn beveiligd met behulp van een beleidsbestand

WCF-services kunnen een configuratiebestand gebruiken om een service te beveiligen en dat mechanisme is vergelijkbaar met een WSE 3.0-beleidsbestand. In WSE 3.0 bij het beveiligen van een webservice met behulp van een beleidsbestand gebruikt u een kant-en-klare beveiligingsverklaring of een aangepaste beleidsverklaring. De kant-en-klare beveiligingsverklaringen worden nauw toegewezen aan de verificatiemodus van een WCF-beveiligingsbindingselement. Niet alleen zijn de WCF-verificatiemodi en de kant-en-klare beveiligingsverklaringen van WSE 3.0 met dezelfde naam, ze beveiligen de berichten met dezelfde referentietypen. De kant-en-klare beveiligingsverklaring in WSE 3.0 wordt bijvoorbeeld usernameForCertificate toegewezen aan de UsernameForCertificate verificatiemodus in WCF. In de volgende codevoorbeelden ziet u hoe een minimaal beleid dat gebruikmaakt van de usernameForCertificate kant-en-klare beveiligingsverklaring in WSE 3.0, wordt toegewezen aan een UsernameForCertificate verificatiemodus in WCF in een aangepaste binding.

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>

Als u de beveiligingsinstellingen van een WSE 3.0-webservice wilt migreren die zijn opgegeven in een beleidsbestand naar WCF, moet een aangepaste binding worden gemaakt in een configuratiebestand en moet de kant-en-klare beveiligingsverklaring worden ingesteld op de equivalente verificatiemodus. Daarnaast moet de aangepaste binding worden geconfigureerd voor het gebruik van de WS-Adresseringsspecificatie van augustus 2004 wanneer WSE 3.0-clients communiceren met de service. Wanneer de gemigreerde WCF-service geen communicatie met WSE 3.0-clients vereist en alleen de beveiligingspariteit moet behouden, kunt u overwegen de door het WCF-systeem gedefinieerde bindingen te gebruiken met de juiste beveiligingsinstellingen in plaats van een aangepaste binding te maken.

De volgende tabel bevat de toewijzing tussen een WSE 3.0-beleidsbestand en de equivalente aangepaste binding in WCF.

WSE 3.0 Turnkey Security Assertion Aangepaste WCF-bindingsconfiguratie
<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>

Zie Aangepaste bindingen voor meer informatie over het maken van aangepaste bindingen in WCF.

WSE 3.0-webservices die zijn beveiligd met toepassingscode

Of WSE 3.0 of WCF wordt gebruikt, de beveiligingsvereisten kunnen worden opgegeven in de toepassingscode in plaats van in de configuratie. In WSE 3.0 wordt dit bereikt door een klasse te maken die is afgeleid van de Policy klasse en vervolgens door de vereisten toe te voegen door de methode aan te Add roepen. Zie How to: Secure a Web Service Without Using a Policy File (Een webservice beveiligen zonder een beleidsbestand te gebruiken) voor meer informatie over het opgeven van de beveiligingsvereisten in code. Als u in WCF beveiligingsvereisten in code wilt opgeven, maakt u een exemplaar van de BindingElementCollection klasse en voegt u een exemplaar van een SecurityBindingElement aan de BindingElementCollectionklasse toe. De beveiligingsverklaringsvereisten worden ingesteld met behulp van de helpermethoden voor de statische verificatiemodus van de SecurityBindingElement klasse. Zie How to: Create a Custom Binding Using the SecurityBindingElement and How to: Create a SecurityBindingElement and How to: Create a SecurityBindingElement for a Specified Authentication Mode voor een opgegeven verificatiemodus voor meer informatie over het opgeven van beveiligingsvereisten in code.

WSE 3.0 Aangepaste beleidsverklaring

In WSE 3.0 zijn er twee soorten aangepaste beleidsverklaringen: die een SOAP-bericht beveiligen en die geen SOAP-bericht beveiligen. Beleidsverklaringen die SOAP-berichten beveiligen die zijn afgeleid van de WSE 3.0-klasse SecurityPolicyAssertion en het conceptuele equivalent in WCF is de SecurityBindingElement klasse.

Een belangrijk punt om te weten is dat de kant-en-klare beveiligingsverklaringen van WSE 3.0 een subset van de WCF-verificatiemodi zijn. Als u een aangepaste beleidsverklaring hebt gemaakt in WSE 3.0, is er mogelijk een equivalente WCF-verificatiemodus. WSE 3.0 biedt bijvoorbeeld geen CertificateOverTransport-beveiligingsverklaring die gelijk is aan UsernameOverTransport kant-en-klare beveiligingsverklaring, maar gebruikt een X.509-certificaat voor clientverificatiedoeleinden. Als u uw eigen aangepaste beleidsverklaring voor dit scenario hebt gedefinieerd, maakt WCF de migratie eenvoudig. WCF definieert een verificatiemodus voor dit scenario, zodat u kunt profiteren van de helpermethoden voor de statische verificatiemodus om een WCFSecurityBindingElement te configureren.

Als er geen WCF-verificatiemodus is die gelijk is aan een aangepaste beleidsverklaring waarmee SOAP-berichten worden beveiligd, wordt een klasse afgeleid van TransportSecurityBindingElementSymmetricSecurityBindingElement of AsymmetricSecurityBindingElementWCF-klassen en het equivalente bindingselement wordt opgegeven. Zie Voor meer informatie : Een aangepaste binding maken met behulp van securityBindingElement.

Als u een aangepaste beleidsverklaring wilt converteren die een SOAP-bericht niet beveiligt, raadpleegt u Filteren en de voorbeeld-aangepaste bericht interceptor.

Aangepast WSE 3.0-beveiligingstoken

Het WCF-programmeermodel voor het maken van een aangepast token verschilt van WSE 3.0. Zie Aangepaste beveiligingstokens maken voor meer informatie over het maken van een aangepast token in WSE. Zie Een aangepast token maken in WCF voor meer informatie over het maken van een aangepast token.

WSE 3.0 Aangepast tokenbeheer

Het programmeermodel voor het maken van een aangepast tokenbeheer verschilt in WCF dan WSE 3.0. Zie Een aangepast token maken voor meer informatie over het maken van een aangepast tokenbeheer en de andere onderdelen die vereist zijn voor een aangepast beveiligingstoken : Een aangepast token maken.

Notitie

Als u een aangepast beveiligingstokenbeheer UsernameToken hebt gemaakt, biedt WCF een eenvoudiger mechanisme om de verificatielogica op te geven dan het maken van een aangepast beveiligingstokenbeheer. Zie Procedure: Een aangepaste gebruikersnaam en wachtwoordvalidator gebruiken voor meer informatie.

WSE 3.0-webservices die gebruikmaken van met MTOM gecodeerde SOAP-berichten

Net als een WSE 3-toepassing kan een WCF-toepassing de MTOM-berichtcodering in de configuratie opgeven. Als u deze instelling wilt migreren, voegt u de <mtomMessageEncoding> toe aan de binding voor de service. In het volgende codevoorbeeld ziet u hoe MTOM-codering is opgegeven in WSE 3.0 voor een service die equivalent is in WCF.

WSE 3.0

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

WCF

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

Berichten

WSE 3.0-toepassingen die gebruikmaken van de WSE Messaging-API

Wanneer de WSE Messaging-API wordt gebruikt om directe toegang te krijgen tot de XML die wordt gecommuniceerd tussen de client en de webservice, kan de toepassing worden geconverteerd naar 'Plain Old XML' (POX). Zie Interoperabiliteit met POX-toepassingen voor meer informatie over POX. Zie SOAP-berichten verzenden en ontvangen met behulp van de WSE Messaging-API voor meer informatie over de WSE Messaging-API.

Transporten

TCP

WSE 3.0-clients en webservices die SOAP-berichten verzenden met behulp van het TCP-transport werken standaard niet met WCF-clients en webservices. Deze incompatibiliteit is te wijten aan verschillen in de framelijsten die in het TCP-protocol worden gebruikt en om prestatieredenen. In een WCF-voorbeeld wordt echter beschreven hoe u een aangepaste TCP-sessie implementeert die interoperateert met WSE 3.0. Zie Transport: WSE 3.0 TCP-interoperabiliteit voor meer informatie over dit voorbeeld.

Als u wilt opgeven dat een WCF-toepassing gebruikmaakt van het TCP-transport, gebruikt u netTcpBinding><.

Aangepast transport

Het equivalent van een aangepast WSE 3.0-transport in WCF is een kanaalextensie. Zie De kanaallaag uitbreiden voor meer informatie over het maken van een kanaalextensie.

Zie ook