Migrera WSE 3.0 Web Services till WCF
Fördelarna med att migrera WSE 3.0-webbtjänster till Windows Communication Foundation (WCF) omfattar förbättrad prestanda och stöd för ytterligare transporter, ytterligare säkerhetsscenarier och WS-*-specifikationer. En webbtjänst som migreras från WSE 3.0 till WCF kan uppleva upp till 200 % till 400 % prestandaförbättringar. Mer information om de transporter som stöds av WCF finns i Välja en transport. En lista över scenarier som stöds av WCF finns i Vanliga säkerhetsscenarier. En lista över specifikationer som stöds av WCF finns i Web Services Protocols Interoperability Guide.
Följande avsnitt innehåller vägledning om hur du migrerar en specifik funktion i en WSE 3.0-webbtjänst till WCF.
Allmänt
WSE 3.0- och WCF-program omfattar samverkan på trådnivå och en gemensam uppsättning terminologi. WSE 3.0- och WCF-program är driftskompatibla på trådnivå baserat på den uppsättning WS-* specifikationer som båda stöder. När ett WSE 3.0- eller WCF-program utvecklas finns det en gemensam uppsättning terminologi, till exempel namnen på nyckelfärdiga säkerhetskontroller i WSE och autentiseringslägena.
Även om det finns många liknande aspekter mellan programmeringsmodellerna WCF och ASP.NET eller WSE 3.0 är de olika. Mer information om WCF-programmeringsmodellen finns i Grundläggande programmeringslivscykel.
Kommentar
Om du vill migrera en WSE-webbtjänst till WCF kan verktyget ServiceModel Metadata Utility Tool (Svcutil.exe) användas för att generera en klient. Klienten innehåller dock gränssnitt och klasser som kan användas som startpunkt för en WCF-tjänst också. De gränssnitt som genereras har attributet OperationContractAttribute tillämpat på medlemmarna i kontraktet med ReplyAction egenskapen inställd på *
. När en WSE-klient anropar en webbtjänst med den här inställningen utlöses följande undantag: Web.Services3.ResponseProcessingException: WSE910: Ett fel inträffade under bearbetningen av ett svarsmeddelande och du kan hitta felet i det inre undantaget. Du kan minimera detta genom att ange ReplyAction egenskapen för OperationContractAttribute attributet till ett icke-värdenull
, till exempel http://Microsoft.WCF.Documentation/ResponseToOCAMethod
.
Säkerhet
WSE 3.0-webbtjänster som skyddas med hjälp av en principfil
WCF-tjänster kan använda en konfigurationsfil för att skydda en tjänst och den mekanismen liknar en WSE 3.0-principfil. I WSE 3.0 när du skyddar en webbtjänst med hjälp av en principfil använder du antingen en nyckelfärdig säkerhetskontroll eller en anpassad principkontroll. Nyckelfärdiga säkerhetskontroller mappas nära till autentiseringsläget för ett WCF-säkerhetsbindningselement. Det är inte bara WCF-autentiseringslägena och WSE 3.0-nyckelfärdiga säkerhetskontroller som heter samma eller på liknande sätt, de skyddar meddelandena med samma typer av autentiseringsuppgifter. usernameForCertificate
Nyckelfärdiga säkerhetskontroller i WSE 3.0 mappar till UsernameForCertificate
autentiseringsläget i WCF. Följande kodexempel visar hur en minimal princip som använder usernameForCertificate
nyckelfärdiga säkerhetskontroller i WSE 3.0 mappar till ett UsernameForCertificate
autentiseringsläge i WCF i en anpassad bindning.
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>
Om du vill migrera säkerhetsinställningarna för en WSE 3.0-webbtjänst som anges i en principfil till WCF måste en anpassad bindning skapas i en konfigurationsfil och nyckelfärdiga säkerhetskontroller måste vara inställda på motsvarande autentiseringsläge. Dessutom måste den anpassade bindningen konfigureras för att använda WS-adresseringsspecifikationen för augusti 2004 när WSE 3.0-klienter kommunicerar med tjänsten. När den migrerade WCF-tjänsten inte kräver kommunikation med WSE 3.0-klienter och endast måste upprätthålla säkerhetsparitet bör du överväga att använda WCF-systemdefinierade bindningar med lämpliga säkerhetsinställningar i stället för att skapa en anpassad bindning.
I följande tabell visas mappningen mellan en WSE 3.0-principfil och motsvarande anpassade bindning i WCF.
WSE 3.0 Nyckelfärdig säkerhetskontroll | Anpassad bindningskonfiguration för WCF |
---|---|
<usernameOverTransportSecurity/> | <customBinding> <binding name="MyBinding"> <security authenticationMode="UserNameOverTransport" /> <textMessageEncoding messageVersion="Soap12WSAddressingAugust2004" /> </binding> </customBinding> |
<mutualCertificate10Säkerhet/> | <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> |
Mer information om hur du skapar anpassade bindningar i WCF finns i Anpassade bindningar.
WSE 3.0-webbtjänster som skyddas med programkod
Oavsett om WSE 3.0 eller WCF används kan säkerhetskrav anges i programkod i stället för i konfigurationen. I WSE 3.0 utförs detta genom att skapa en klass som härleds från Policy
klassen och sedan genom att lägga till kraven genom att anropa Add
metoden. Mer information om hur du anger säkerhetskrav i kod finns i Så här: Skydda en webbtjänst utan att använda en principfil. Om du vill ange säkerhetskrav i kod i WCF skapar du en instans av BindingElementCollection klassen och lägger till en instans av en SecurityBindingElement i BindingElementCollection. Kraven för säkerhetskontroller ställs in med hjälpmetoderna för statiskt autentiseringsläge i SecurityBindingElement klassen. Mer information om hur du anger säkerhetskrav i kod med WCF finns i How to: Create a Custom Binding Using the SecurityBindingElement and How to: Create a SecurityBindingElement for a Specified Authentication Mode (Så här skapar du en anpassad bindning med SecurityBindingElement och Så här skapar du ett SecurityBindingElement för ett angivet autentiseringsläge).
WSE 3.0 Custom Policy Assertion
I WSE 3.0 finns det två typer av anpassade principkontroller: de som skyddar ett SOAP-meddelande och de som inte skyddar ett SOAP-meddelande. Principkontroller som skyddar SOAP-meddelanden härleds från klassen WSE 3.0 SecurityPolicyAssertion
och den konceptuella motsvarigheten SecurityBindingElement i WCF är klassen.
En viktig punkt att notera är att WSE 3.0 nyckelfärdiga säkerhetskontroller är en delmängd av WCF-autentiseringslägena. Om du har skapat en anpassad principkontroll i WSE 3.0 kan det finnas ett motsvarande WCF-autentiseringsläge. WSE 3.0 tillhandahåller till exempel inte en CertificateOverTransport-säkerhetskontroll som motsvarar UsernameOverTransport
nyckelfärdig säkerhetskontroll, utan använder ett X.509-certifikat för klientautentisering. Om du har definierat din egen anpassade principkontroll för det här scenariot gör WCF migreringen enkel. WCF definierar ett autentiseringsläge för det här scenariot, så att du kan använda hjälpmetoderna för statiskt autentiseringsläge för att konfigurera en WCFSecurityBindingElement.
Om det inte finns ett WCF-autentiseringsläge som motsvarar en anpassad principkontroll som skyddar SOAP-meddelanden, härleder du en klass från TransportSecurityBindingElement, SymmetricSecurityBindingElement eller AsymmetricSecurityBindingElementWCF-klasser och anger motsvarande bindningselement. Mer information finns i How to: Create a Custom Binding Using the SecurityBindingElement (Skapa en anpassad bindning med SecurityBindingElement).
Information om hur du konverterar en anpassad principkontroll som inte skyddar ett SOAP-meddelande finns i Filtrering och exempel på anpassad meddelandeavlyssnare.
Anpassad säkerhetstoken för WSE 3.0
WCF-programmeringsmodellen för att skapa en anpassad token skiljer sig från WSE 3.0. Mer information om hur du skapar en anpassad token i WSE finns i Skapa anpassade säkerhetstoken. Mer information om hur du skapar en anpassad token i WCF finns i Så här skapar du en anpassad token.
Anpassad tokenhanterare för WSE 3.0
Programmeringsmodellen för att skapa en anpassad tokenhanterare skiljer sig från WCF än WSE 3.0. Mer information om hur du skapar en anpassad tokenhanterare och andra komponenter som krävs för en anpassad säkerhetstoken finns i Så här skapar du en anpassad token.
Kommentar
Om du har skapat en anpassad UsernameToken
säkerhetstokenhanterare tillhandahåller WCF en enklare mekanism för att ange autentiseringslogiken än att skapa en anpassad säkerhetstokenhanterare. Mer information finns i Så här använder du ett anpassat användarnamn och lösenordsverifierare.
WSE 3.0-webbtjänster som använder MTOM-kodade SOAP-meddelanden
Precis som ett WSE 3-program kan ett WCF-program ange MTOM-meddelandekodningen i konfigurationen. Om du vill migrera den här inställningen lägger du till <mtomMessageEncoding i bindningen> för tjänsten. Följande kodexempel visar hur MTOM-kodning anges i WSE 3.0 för en tjänst som är likvärdig i WCF.
WSE 3.0
<messaging>
<mtom clientMode="On"/>
</messaging>
WCF
<customBinding>
<binding name="MyBinding">
<mtomMessageEncoding/>
</binding>
</customBinding>
Meddelandetjänster
WSE 3.0-program som använder WSE Messaging API
När WSE Messaging-API:et används för att få direkt åtkomst till DEN XML som kommuniceras mellan klienten och webbtjänsten kan programmet konverteras till att använda "Vanlig gammal XML" (POX). Mer information om POX finns i Samverkan med POX-program. Mer information om WSE Messaging API finns i Skicka och ta emot SOAP-meddelanden med hjälp av WSE Messaging API.
Transporter
TCP
Som standard samverkar inte WSE 3.0-klienter och webbtjänster som skickar SOAP-meddelanden med TCP-transporten med WCF-klienter och webbtjänster. Den här inkompatibiliteten beror på skillnader i inramningen som används i TCP-protokollet och av prestandaskäl. Ett WCF-exempel beskriver dock hur du implementerar en anpassad TCP-session som interoperates med WSE 3.0. Mer information om det här exemplet finns i Transport: WSE 3.0 TCP Interoperability (Transport: WSE 3.0 TCP Interoperability).
Om du vill ange att ett WCF-program använder TCP-transporten <använder du netTcpBinding>.
Anpassad transport
Motsvarigheten till en anpassad WSE 3.0-transport i WCF är ett kanaltillägg. Mer information om hur du skapar ett kanaltillägg finns i Utöka kanallagret.