Sdílet prostřednictvím


Migrace WSE 3.0 Web Services do WCF

Mezi výhody migrace webových služeb WSE 3.0 na Windows Communication Foundation (WCF) patří vylepšený výkon a podpora dalších přenosů, dalších scénářů zabezpečení a specifikací WS-* . Webová služba migrovaná z WSE 3.0 do WCF může mít až 200% až 400% zlepšení výkonu. Další informace o přenosech podporovaných WCF naleznete v tématu Volba přenosu. Seznam scénářů podporovaných službou WCF najdete v tématu Běžné scénáře zabezpečení. Seznam specifikací podporovaných wcf naleznete v tématu Průvodce interoperabilitou protokolů webových služeb.

Následující části obsahují pokyny k migraci konkrétní funkce webové služby WSE 3.0 do WCF.

OBECNÉ

Aplikace WSE 3.0 a WCF zahrnují interoperabilitu na úrovni drátů a společnou sadu terminologie. Aplikace WSE 3.0 a WCF jsou interoperabilní na úrovni drátu na základě sady specifikací WS-*, které obě podporují. Při vývoji aplikace WSE 3.0 nebo WCF existuje společná sada terminologie, jako jsou názvy kontrolních výrazů zabezpečení na klíč ve WSE a režimy ověřování.

I když mezi programovacími modely WCF a ASP.NET nebo WSE 3.0 existuje mnoho podobných aspektů, liší se. Podrobnosti o programovacím modelu WCF naleznete v tématu Základní programovací životní cyklus.

Poznámka:

K migraci webové služby WSE do WCF nástroje ServiceModel Metadata Utility Tool (Svcutil.exe) lze použít ke generování klienta. Tento klient však obsahuje rozhraní a třídy, které lze použít jako výchozí bod pro službu WCF. Rozhraní generovaná mají OperationContractAttribute atribut použitý pro členy kontraktu s vlastností nastavenou ReplyAction na *. Když klient WSE volá webovou službu s tímto nastavením, vyvolá se následující výjimka: Web.Services3.ResponseProcessingException: WSE910: Při zpracování zprávy odpovědi došlo k chybě a chybu najdete ve vnitřní výjimce. Chcete-li tento problém zmírnit, nastavte ReplyAction vlastnost atributu OperationContractAttribute na hodnotu,null například http://Microsoft.WCF.Documentation/ResponseToOCAMethod.

Zabezpečení

Webové služby WSE 3.0, které jsou zabezpečené pomocí souboru zásad

Služby WCF můžou k zabezpečení služby použít konfigurační soubor a tento mechanismus je podobný souboru zásad WSE 3.0. Ve WSE 3.0 při zabezpečení webové služby pomocí souboru zásad použijete kontrolní výraz zabezpečení na klíč nebo vlastní kontrolní výraz zásady. Kontrolní výrazy zabezpečení na klíč mapují úzce na režim ověřování elementu vazby zabezpečení WCF. Nejedná se pouze o režimy ověřování WCF a kontrolní výrazy zabezpečení WSE 3.0 s názvem stejné nebo podobné, zabezpečují zprávy pomocí stejných typů přihlašovacích údajů. Například usernameForCertificate kontrolní výraz zabezpečení na klíč ve WSE 3.0 se mapuje na UsernameForCertificate režim ověřování ve WCF. Následující příklady kódu ukazují, jak minimální zásady, které používají usernameForCertificate kontrolní výraz zabezpečení na klíč ve WSE 3.0, mapuje na UsernameForCertificate režim ověřování ve WCF ve vlastní vazbě.

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>

Chcete-li migrovat nastavení zabezpečení webové služby WSE 3.0 zadané v souboru zásad na WCF, je nutné vytvořit vlastní vazbu v konfiguračním souboru a kontrolní výraz zabezpečení na klíč musí být nastaven na odpovídající režim ověřování. Kromě toho musí být vlastní vazba nakonfigurována tak, aby používala specifikaci WS-Adresování ze srpna 2004, když klienti WSE 3.0 komunikují se službou. Pokud migrovaná služba WCF nevyžaduje komunikaci s klienty WSE 3.0 a musí udržovat pouze paritu zabezpečení, zvažte použití systémově definovaných vazeb WCF s odpovídajícími nastaveními zabezpečení místo vytvoření vlastní vazby.

Následující tabulka uvádí mapování mezi souborem zásad WSE 3.0 a ekvivalentní vlastní vazbou ve WCF.

Kontrolní výraz zabezpečení WSE 3.0 na klíč Konfigurace vlastních vazeb WCF
<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>

Další informace o vytváření vlastních vazeb ve WCF naleznete v tématu Vlastní vazby.

Webové služby WSE 3.0 zabezpečené pomocí kódu aplikace

Bez ohledu na to, jestli se používá WSE 3.0 nebo WCF, je možné místo konfigurace zadat požadavky na zabezpečení v kódu aplikace. Ve WSE 3.0 je toho dosaženo vytvořením třídy, která je odvozena z Policy třídy a pak přidáním požadavků voláním Add metody. Další podrobnosti o určení požadavků na zabezpečení v kódu naleznete v tématu Postupy: Zabezpečení webové služby bez použití souboru zásad. Chcete-li v WCF určit požadavky na zabezpečení v kódu, vytvořte instanci BindingElementCollection třídy a přidejte do objektu BindingElementCollectioninstance SecurityBindingElement . Požadavky na kontrolní výraz zabezpečení jsou nastaveny pomocí pomocných metod režimu statického SecurityBindingElement ověřování třídy. Další podrobnosti o určení požadavků na zabezpečení v kódu pomocí WCF naleznete v tématu Postupy: Vytvoření vlastní vazby pomocí SecurityBindingElement a Postupy: Vytvoření SecurityBindingElement pro zadaný režim ověřování.

Kontrolní výraz vlastních zásad WSE 3.0

Ve WSE 3.0 existují dva typy vlastních kontrolních výrazů zásad: ty, které zabezpečují zprávu SOAP a ty, které nezabezpečují zprávu SOAP. Kontrolní výrazy zásad, které zabezpečené zprávy SOAP jsou odvozeny z WSE 3.0 SecurityPolicyAssertion třídy a konceptuální ekvivalent ve WCF je SecurityBindingElement třída.

Důležité je uvědomit si, že kontrolní výrazy zabezpečení WSE 3.0 jsou podmnožinou režimů ověřování WCF. Pokud jste vytvořili vlastní kontrolní výraz zásad ve WSE 3.0, může existovat ekvivalentní režim ověřování WCF. Například WSE 3.0 neposkytuje kontrolní výraz zabezpečení CertificateOverTransport, který je ekvivalentem UsernameOverTransport kontrolního výrazu zabezpečení na klíč, ale používá certifikát X.509 pro účely ověřování klientů. Pokud jste pro tento scénář definovali vlastní kontrolní výraz zásad, wcf usnadňuje migraci. WCF definuje režim ověřování pro tento scénář, takže můžete využít pomocné metody režimu statického ověřování ke konfiguraci WCFSecurityBindingElement.

Pokud neexistuje režim ověřování WCF, který je ekvivalentní k vlastnímu kontrolnímu výrazu zásad, který zabezpečuje zprávy SOAP, odvozuje třídu z TransportSecurityBindingElementSymmetricSecurityBindingElement tříd WCF a AsymmetricSecurityBindingElementurčuje ekvivalentní prvek vazby. Další podrobnosti naleznete v tématu Postupy: Vytvoření vlastní vazby pomocí SecurityBindingElement.

Pokud chcete převést vlastní kontrolní výraz zásad, který nezabezpečí zprávu SOAP, přečtěte si téma Filtrování a ukázkový vlastní zachytávání zpráv.

Vlastní token zabezpečení WSE 3.0

Programovací model WCF pro vytvoření vlastního tokenu se liší od WSE 3.0. Podrobnosti o vytvoření vlastního tokenu ve WSE najdete v tématu Vytváření vlastních tokenů zabezpečení. Podrobnosti o vytvoření vlastního tokenu ve WCF najdete v tématu Postupy: Vytvoření vlastního tokenu.

Vlastní správce tokenů WSE 3.0

Programovací model pro vytvoření vlastního správce tokenů se ve WCF liší od WSE 3.0. Podrobnosti o vytvoření vlastního správce tokenů a dalších komponent požadovaných pro vlastní token zabezpečení najdete v tématu Postupy: Vytvoření vlastního tokenu.

Poznámka:

Pokud jste vytvořili vlastního UsernameToken správce tokenů zabezpečení, poskytuje WCF jednodušší mechanismus pro určení logiky ověřování než vytvoření vlastního správce tokenů zabezpečení. Další podrobnosti najdete v tématu Postupy: Použití vlastního validátoru uživatelského jména a hesla.

Webové služby WSE 3.0, které používají zprávy SOAP s kódováním MTOM

Podobně jako aplikace WSE 3 může aplikace WCF určit kódování zpráv MTOM v konfiguraci. Pokud chcete toto nastavení migrovat, přidejte <mtomMessageEncoding> do vazby pro službu. Následující příklad kódu ukazuje, jak je kódování MTOM zadáno ve WSE 3.0 pro službu, která je ekvivalentní ve WCF.

WSE 3.0

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

WCF

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

Zasílání zpráv

Aplikace WSE 3.0, které používají rozhraní WSE Messaging API

Pokud se rozhraní WSE Messaging API používá k získání přímého přístupu k xml, který je komunikován mezi klientem a webovou službou, lze aplikaci převést tak, aby používala "Plain Old XML" (POX). Další podrobnosti o POX naleznete v tématu Interoperabilita s aplikacemi POX. Další podrobnosti o rozhraní WSE Messaging API naleznete v tématu Odesílání a příjem zpráv SOAP pomocí rozhraní WSE Messaging API.

Přenosy

TCP

Ve výchozím nastavení klienti WSE 3.0 a webové služby, které odesílají zprávy SOAP pomocí přenosu TCP, nespolupracují s klienty WCF a webovými službami. Tato nekompatibilitu je způsobená rozdíly v rámování používaném v protokolu TCP a z důvodů výkonu. Ukázka WCF však podrobně popisuje, jak implementovat vlastní relaci TCP, která spolupracuje s WSE 3.0. Podrobnosti o této ukázce naleznete v tématu Přenos: WSE 3.0 TCP Interoperability.

Chcete-li určit, že aplikace WCF používá přenos TCP, použijte <netTcpBinding>.

Vlastní přenos

Ekvivalentem vlastního přenosu WSE 3.0 ve WCF je rozšíření kanálu. Podrobnosti o vytvoření rozšíření kanálu najdete v tématu Rozšíření vrstvy kanálu.

Viz také