Migrowanie usług sieci Web programu WSE 3.0 do usługi WCF
Zalety migracji usług sieci Web WSE 3.0 do programu Windows Communication Foundation (WCF) obejmują lepszą wydajność i obsługę dodatkowych transportów, dodatkowych scenariuszy zabezpieczeń i specyfikacji WS-*. Usługa sieci Web migrowana z programu WSE 3.0 do programu WCF może wystąpić do 200% do 400% poprawy wydajności. Aby uzyskać więcej informacji o transportach obsługiwanych przez usługę WCF, zobacz Wybieranie transportu. Aby uzyskać listę scenariuszy obsługiwanych przez usługę WCF, zobacz Typowe scenariusze zabezpieczeń. Aby uzyskać listę specyfikacji obsługiwanych przez program WCF, zobacz Przewodnik współdziałania protokołów usług sieci Web.
Poniższe sekcje zawierają wskazówki dotyczące migrowania określonej funkcji usługi internetowej WSE 3.0 do usługi WCF.
Ogólne
Aplikacje WSE 3.0 i WCF obejmują współdziałanie na poziomie przewodu i wspólny zestaw terminologii. Aplikacje WSE 3.0 i WCF są współdziałające na poziomie przewodu w oparciu o zestaw specyfikacji WS-*, które obsługują. W przypadku opracowania aplikacji WSE 3.0 lub WCF istnieje wspólny zestaw terminologii, taki jak nazwy asercji zabezpieczeń z kluczem do użycia w programie WSE i tryby uwierzytelniania.
Chociaż istnieje wiele podobnych aspektów między modelami programowania WCF i ASP.NET lub WSE 3.0, różnią się one. Aby uzyskać szczegółowe informacje na temat modelu programowania WCF, zobacz Podstawowy cykl życia programowania.
Uwaga
Aby przeprowadzić migrację usługi internetowej WSE do programu WCF, można użyć narzędzia ServiceModel Metadata Tool (Svcutil.exe) do wygenerowania klienta. Ten klient zawiera jednak interfejsy i klasy, które mogą być używane jako punkt wyjścia dla usługi WCF. Wygenerowane interfejsy mają OperationContractAttribute atrybut zastosowany do elementów członkowskich kontraktu z właściwością ustawioną ReplyAction na *
wartość . Gdy klient programu WSE wywołuje usługę sieci Web z tym ustawieniem, zgłaszany jest następujący wyjątek: Web.Services3.ResponseProcessingException: WSE910: Wystąpił błąd podczas przetwarzania komunikatu odpowiedzi i można go znaleźć w wyjątku wewnętrznym. Aby temu zapobiec, ustaw ReplyAction właściwość atrybutu OperationContractAttribute na wartość innąnull
niż http://Microsoft.WCF.Documentation/ResponseToOCAMethod
.
Zabezpieczenia
Usługi sieci Web programu WSE 3.0 zabezpieczone przy użyciu pliku zasad
Usługi WCF mogą używać pliku konfiguracji do zabezpieczania usługi i ten mechanizm jest podobny do pliku zasad programu WSE 3.0. W programie WSE 3.0 podczas zabezpieczania usługi sieci Web przy użyciu pliku zasad należy użyć asercji zabezpieczeń lub niestandardowej asercji zasad. Gotowe asercji zabezpieczeń są ściśle mapowanie na tryb uwierzytelniania elementu powiązania zabezpieczeń WCF. Nie tylko tryby uwierzytelniania WCF i asercja zabezpieczeń WSE 3.0 o nazwie te same lub podobne, zabezpieczają komunikaty przy użyciu tych samych typów poświadczeń. Na przykład podklucz usernameForCertificate
asercja zabezpieczeń w programie WSE 3.0 mapuje się na UsernameForCertificate
tryb uwierzytelniania w programie WCF. W poniższych przykładach kodu pokazano, jak minimalne zasady korzystające z usernameForCertificate
asercji zabezpieczeń w programie WSE 3.0 mapują się na UsernameForCertificate
tryb uwierzytelniania w programie WCF w powiązaniu niestandardowym.
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>
Aby przeprowadzić migrację ustawień zabezpieczeń usługi sieci Web WSE 3.0 określonej w pliku zasad do usługi WCF, należy utworzyć powiązanie niestandardowe w pliku konfiguracji, a asercja zabezpieczeń musi być ustawiona na równoważny tryb uwierzytelniania. Ponadto należy skonfigurować powiązanie niestandardowe tak, aby używało specyfikacji adresowania WS z sierpnia 2004 r., gdy klienci programu WSE 3.0 komunikują się z usługą. Jeśli zmigrowana usługa WCF nie wymaga komunikacji z klientami programu WSE 3.0 i musi zachować parzystość zabezpieczeń, rozważ użycie powiązań zdefiniowanych przez system WCF z odpowiednimi ustawieniami zabezpieczeń zamiast tworzenia powiązania niestandardowego.
W poniższej tabeli wymieniono mapowanie między plikiem zasad programu WSE 3.0 i równoważnym powiązaniem niestandardowym w programie WCF.
Asercja zabezpieczeń programu WSE 3.0 | Konfiguracja powiązania niestandardowego programu 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> |
Aby uzyskać więcej informacji na temat tworzenia powiązań niestandardowych w programie WCF, zobacz Powiązania niestandardowe.
Usługi sieci Web programu WSE 3.0 zabezpieczone przy użyciu kodu aplikacji
Niezależnie od tego, czy jest używany program WSE 3.0, czy WCF, wymagania dotyczące zabezpieczeń można określić w kodzie aplikacji, a nie w konfiguracji. W programie WSE 3.0 jest to realizowane przez utworzenie klasy pochodzącej Policy
z klasy, a następnie dodanie wymagań przez wywołanie Add
metody . Aby uzyskać więcej informacji na temat określania wymagań dotyczących zabezpieczeń w kodzie, zobacz How to: Secure a Web Service Without Using a Policy File (Jak zabezpieczyć usługę internetową bez używania pliku zasad). W programie WCF, aby określić wymagania dotyczące zabezpieczeń w kodzie, utwórz wystąpienie BindingElementCollection klasy i dodaj wystąpienie klasy SecurityBindingElement do klasy BindingElementCollection. Wymagania dotyczące asercji zabezpieczeń są ustawiane przy użyciu metod pomocnika trybu uwierzytelniania statycznego SecurityBindingElement klasy. Aby uzyskać więcej informacji na temat określania wymagań dotyczących zabezpieczeń w kodzie przy użyciu programu WCF, zobacz Instrukcje: tworzenie powiązania niestandardowego przy użyciu elementu SecurityBindingElement i Instrukcje: tworzenie elementu SecurityBindingElement dla określonego trybu uwierzytelniania.
Asercji zasad niestandardowych programu WSE 3.0
W programie WSE 3.0 istnieją dwa typy niestandardowych asercji zasad: te, które zabezpieczają komunikat PROTOKOŁU SOAP i te, które nie zabezpieczają komunikatu PROTOKOŁU SOAP. Asercji zasad, które zabezpieczają komunikaty PROTOKOŁU SOAP pochodzące z klasy WSE 3.0 SecurityPolicyAssertion
, a koncepcyjnym odpowiednikiem w programie WCF jest SecurityBindingElement klasa .
Należy pamiętać, że asercja zabezpieczeń WSE 3.0 jest podzbiorem trybów uwierzytelniania WCF. Jeśli utworzono niestandardową asercję zasad w programie WSE 3.0, może istnieć odpowiedni tryb uwierzytelniania WCF. Na przykład program WSE 3.0 nie udostępnia asercji zabezpieczeń CertificateOverTransport, która jest równoważna UsernameOverTransport
asercji zabezpieczeń klucza, ale używa certyfikatu X.509 do celów uwierzytelniania klienta. Jeśli w tym scenariuszu zdefiniowano własną niestandardową asercję zasad, program WCF ułatwia migrację. Program WCF definiuje tryb uwierzytelniania dla tego scenariusza, dzięki czemu można korzystać z metod pomocnika trybu uwierzytelniania statycznego w celu skonfigurowania programu WCFSecurityBindingElement.
Jeśli nie ma trybu uwierzytelniania WCF, który jest odpowiednikiem niestandardowej asercji zasad, która zabezpiecza komunikaty PROTOKOŁU SOAP, należy utworzyć klasę z TransportSecurityBindingElementklas lub SymmetricSecurityBindingElement AsymmetricSecurityBindingElementWCF i określić równoważny element powiązania. Aby uzyskać więcej informacji, zobacz How to: Create a Custom Binding Using the SecurityBindingElement (Instrukcje: tworzenie powiązania niestandardowego przy użyciu elementu SecurityBindingElement).
Aby przekonwertować niestandardową asercję zasad, która nie zabezpiecza komunikatu PROTOKOŁU SOAP, zobacz Filtrowanie i przykładowy moduł przechwytywania komunikatów niestandardowych.
Niestandardowy token zabezpieczający programu WSE 3.0
Model programowania WCF do tworzenia tokenu niestandardowego różni się od programu WSE 3.0. Aby uzyskać szczegółowe informacje na temat tworzenia tokenu niestandardowego w programie WSE, zobacz Tworzenie niestandardowych tokenów zabezpieczeń. Aby uzyskać szczegółowe informacje na temat tworzenia tokenu niestandardowego w programie WCF, zobacz Instrukcje: tworzenie tokenu niestandardowego.
Niestandardowy menedżer tokenów programu WSE 3.0
Model programowania do tworzenia niestandardowego menedżera tokenów różni się w programie WCF niż WSE 3.0. Aby uzyskać szczegółowe informacje na temat tworzenia niestandardowego menedżera tokenów i innych składników wymaganych dla niestandardowego tokenu zabezpieczającego, zobacz Instrukcje: tworzenie tokenu niestandardowego.
Uwaga
Jeśli utworzono niestandardowego menedżera tokenów zabezpieczających UsernameToken
, program WCF zapewnia łatwiejszy mechanizm określania logiki uwierzytelniania niż tworzenie niestandardowego menedżera tokenów zabezpieczających. Aby uzyskać więcej informacji, zobacz How to: Use a Custom User Name and Password Validator (Instrukcje: używanie niestandardowej nazwy użytkownika i modułu sprawdzania poprawności hasła).
Usługi sieci Web WSE 3.0 korzystające z zakodowanych komunikatów PROTOKOŁU SOAP MTOM
Podobnie jak aplikacja WSE 3, aplikacja WCF może określić kodowanie komunikatów MTOM w konfiguracji. Aby przeprowadzić migrację <tego ustawienia, dodaj element mtomMessageEncoding> do powiązania usługi. Poniższy przykład kodu pokazuje, jak kodowanie MTOM jest określone w programie WSE 3.0 dla usługi, która jest równoważna w programie WCF.
WSE 3.0
<messaging>
<mtom clientMode="On"/>
</messaging>
WCF
<customBinding>
<binding name="MyBinding">
<mtomMessageEncoding/>
</binding>
</customBinding>
Obsługa komunikatów
Aplikacje programu WSE 3.0 korzystające z interfejsu API obsługi komunikatów WSE
Gdy interfejs API obsługi komunikatów WSE jest używany do uzyskiwania bezpośredniego dostępu do kodu XML, który jest przekazywany między klientem a usługą sieci Web, można przekonwertować aplikację w celu użycia zwykłego starego kodu XML (POX). Aby uzyskać więcej informacji na temat funkcji POX, zobacz Współdziałanie z aplikacjami POX. Aby uzyskać więcej informacji na temat interfejsu API obsługi komunikatów WSE, zobacz Wysyłanie i odbieranie komunikatów PROTOKOŁU SOAP przy użyciu interfejsu API obsługi komunikatów WSE.
Transporty
TCP
Domyślnie klienci programu WSE 3.0 i usługi sieci Web, które wysyłają komunikaty PROTOKOŁU SOAP przy użyciu transportu TCP, nie współdziałają z klientami programu WCF i usługami sieci Web. Ta niezgodność jest spowodowana różnicami w framowaniu używanym w protokole TCP i ze względu na wydajność. Jednak przykładowe informacje na temat implementacji niestandardowej sesji TCP, która współdziała z usługą WSE 3.0. Aby uzyskać szczegółowe informacje na temat tego przykładu, zobacz Transport: Współdziałanie protokołu TCP WSE 3.0.
Aby określić, że aplikacja WCF używa transportu TCP, użyj netTcpBinding>.<
Transport niestandardowy
Odpowiednik transportu niestandardowego WSE 3.0 w programie WCF jest rozszerzeniem kanału. Aby uzyskać szczegółowe informacje na temat tworzenia rozszerzenia kanału, zobacz Rozszerzanie warstwy kanału.