Udostępnij za pośrednictwem


Co nowego w programie Windows Communication Foundation 4.5

W tym temacie omówiono funkcje nowe w programie Windows Communication Foundation (WCF) w wersji 4.5.

gRPC jako alternatywa dla programu WCF

gRPC to nowoczesna struktura RPC, która jest popularną alternatywą dla platformy WCF. Usługa gRPC jest oparta na protokole HTTP/2, który zapewnia wiele zalet w porównaniu z platformą WCF, w tym:

  • Wydajność: gRPC jest znacznie wydajniejszy niż WCF, szczególnie w przypadku długotrwałych połączeń.
  • Skalowalność: gRPC jest przeznaczony do skalowania do dużej liczby klientów i serwerów.
  • Zabezpieczenia: usługa gRPC obsługuje różne mechanizmy zabezpieczeń, w tym tls i uwierzytelnianie.
  • Międzyplatformowe: gRPC jest neutralna dla platformy i może być używana z różnymi językami programowania.

Aby uzyskać więcej informacji na temat tworzenia lub migrowania aplikacji WCF do usługi gRPC, zobacz:

Funkcje uproszczenia programu WCF

Wykonano wiele prac, aby ułatwić tworzenie i konserwację aplikacji WCF 4.5. Aby uzyskać więcej informacji, zobacz Funkcje uproszczenia programu WCF.

Obsługa asynchroniczna oparta na zadaniach

Domyślnie funkcja Dodaj odwołanie do usługi generuje metody operacji asynchronicznego zwracania zadań. Odbywa się to zarówno w przypadku metod synchronicznych, jak i asynchronicznych. Umożliwia to asynchroniczne wywoływanie operacji usługi przy użyciu nowego modelu programowania asynchronicznego opartego na zadaniach. Podczas wywoływania wygenerowanej metody serwera proxy program WCF konstruuje obiekt Task reprezentujący operację asynchroniczną i zwraca to zadanie. Zadanie kończy się po zakończeniu operacji. Podczas implementowania operacji asynchronicznych można zaimplementować ją jako operację asynchroniową opartą na zadaniach. Aby uzyskać więcej informacji, zobacz Operacje synchroniczne i asynchroniczne.

Uproszczone wygenerowane pliki konfiguracji

Po dodaniu odwołania do usługi w programie Visual Studio lub użyciu narzędzia SvcUtil.exe zostanie wygenerowany plik konfiguracji klienta. W poprzednich wersjach programu WCF te pliki konfiguracji zawierały wartość każdej właściwości powiązania, nawet jeśli jej wartość jest wartością domyślną. W programie WCF 4.5 wygenerowane pliki konfiguracji zawierają tylko te właściwości powiązania ustawione na wartość inną niż domyślna.

Aby uzyskać więcej informacji, zobacz Funkcje uproszczenia programu WCF.

Rozwój Contract-First

WCF ma teraz wsparcie dla rozwoju zgodnego z podejściem kontrakt-pierwszy. svcutil.exe ma przełącznik /serviceContract, który umożliwia generowanie kontraktów usług i danych z dokumentu WSDL.

Dodawanie referencji do usługi z przenośnego podzestawu projektu

Przenośne projekty podzestawu umożliwiają programistom zestawów .NET obsługę pojedynczego drzewa źródłowego i systemu kompilacji, jednocześnie obsługując wiele platform .NET (komputery stacjonarne, Silverlight, Windows Phone i Xbox). Przenośne projekty podzestawu odwołują się tylko do bibliotek przenośnych platformy .NET, które są zestawami, które mogą być używane na dowolnej platformie .NET. Doświadczenie dewelopera jest takie samo jak dodanie odwołania do usługi w dowolnej innej aplikacji klienckiej WCF. Aby uzyskać więcej informacji, zobacz Add Service Reference in a Portable Subset Project (Dodawanie odwołania do usługi w projekcie przenośnego podzestawu).

Domyślny tryb zgodności ASP.NET został zmieniony

Program WCF zapewnia tryb zgodności ASP.NET, który pozwala deweloperom na pełny dostęp do funkcji w potoku HTTP platformy ASP.NET podczas tworzenia usług WCF. Aby użyć tego trybu, należy ustawić atrybut aspNetCompatibilityEnabled na wartość true w sekcji <serviceHostingEnvironment> web.config. Ponadto każda usługa w tym appDomain musi mieć właściwość RequirementsMode ustawioną na AspNetCompatibilityRequirementsAttribute lub Allowed. Domyślnie AspNetCompatibilityRequirementsAttribute jest teraz ustawione na Allowed. Aby uzyskać więcej informacji, zobacz usługi WCF i ASP.NET.

Nowe wartości domyślne transportu

Aby uprościć konfigurację, zmieniono wiele wartości domyślnych właściwości transportu. Aby uzyskać więcej informacji, zobacz Funkcje uproszczenia programu WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas Zawiera konfigurowalne wartości przydziału dla czytników słowników XML, które ograniczają ilość pamięci używanej przez koder podczas tworzenia komunikatu. Chociaż te limity przydziału można konfigurować, wartości domyślne zmieniły się tak, aby zmniejszyć możliwość jawnego ustawienia ich przez dewelopera. Aby uzyskać więcej informacji, zobacz Funkcje uproszczenia programu WCF.

Walidacja konfiguracji programu WCF

W ramach procesu kompilacji w programie Visual Studio pliki konfiguracji programu WCF są teraz weryfikowane pod kątem atrybutów zdefiniowanych w projekcie. Lista błędów weryfikacji lub ostrzeżeń jest wyświetlana w programie Visual Studio, jeśli walidacja zakończy się niepowodzeniem.

Wskazówki edytora XML

Aby ułatwić nowym i istniejącym deweloperom usług WCF konfigurowanie swoich usług, edytor XML programu Visual Studio udostępnia teraz etykietki narzędzi dla każdego elementu konfiguracji i jego właściwości, które są częścią pliku konfiguracji usługi.

Ulepszenia przesyłania strumieniowego

Dodano obsługę prawdziwego asynchronicznego przesyłania strumieniowego, gdzie strona wysyłająca nie blokuje już wątków, jeśli strona odbierająca nie odczytuje lub robi to wolno, co zwiększa skalowalność. Usunięto ograniczenie buforowania komunikatu, gdy klient wysyła komunikat strumieniowy do usługi WCF hostowanej w IIS. Aby uzyskać więcej informacji, zobacz Funkcje uproszczenia programu WCF.

Upraszczanie uwidaczniania punktu końcowego za pośrednictwem protokołu HTTPS za pomocą usług IIS

Dodano mapowanie protokołu HTTPS w celu uproszczenia uwidaczniania punktu końcowego za pośrednictwem protokołu HTTPS. Aby włączyć punkt końcowy HTTPS, upewnij się, że witryna internetowa ma skonfigurowane powiązanie HTTPS i certyfikat SSL, a następnie po prostu włączyć protokół HTTPS dla katalogu wirtualnego, który hostuje usługę. Jeśli metadane są włączone dla usługi, zostaną również uwidocznione za pośrednictwem protokołu HTTPS.

Generowanie pojedynczego dokumentu WSDL

Niektóre stosy przetwarzania WSDL innych firm nie mogą przetwarzać dokumentów WSDL, które mają zależności od innych dokumentów za pośrednictwem xsd:import. Program WCF umożliwia teraz określenie, że wszystkie informacje WSDL zostaną zwrócone w jednym dokumencie. Aby zażądać pojedynczego dokumentu WSDL dołącz element "?singleWSDL" do identyfikatora URI podczas żądania metadanych z usługi.

Obsługa protokołu WebSocket

WebSockets to technologia, która zapewnia prawdziwą dwukierunkową komunikację przez porty 80 i 443 z charakterystyką wydajności podobną do tcp. Dodano dwa nowe powiązania w celu obsługi komunikacji za pośrednictwem transportu protokołu WebSocket. NetHttpBinding i NetHttpsBinding. Aby uzyskać więcej informacji, zobacz: Powiązania dostarczane przez system.

Nowe wartości domyślne transportu

W poniższej tabeli opisano ustawienia, które zostały zmienione i gdzie można znaleźć dodatkowe informacje.

Majątek Włączone Nowa wartość domyślna Aby uzyskać więcej informacji, zobacz
limit czasu inicjalizacji kanału NetTcpBinding 30 sekund ChannelInitializationTimeout
odsłuch zaległości NetTcpBinding 12 * liczba procesorów ListenBacklog
maksLiczbaOczekującychZaakceptowań Element wiążący transport połączeniowy

SMSvcHost.exe
2 * liczba procesorów do transportu

4 * liczba procesorów dla SMSvcHost.exe
MaxPendingAccepts Konfigurowanie usługi udostępniania portów Net.TCP
maksOczekującychPołączeń Element wiążący transport połączeniowy 12 * liczba procesorów MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 sekund Konfigurowanie usługi udostępniania portów Net.TCP

Konfigurowanie usług WCF w kodzie

Program Windows Communication Foundation (WCF) umożliwia deweloperom konfigurowanie usług przy użyciu plików konfiguracji lub kodu. Pliki konfiguracji są przydatne, gdy po wdrożeniu należy skonfigurować usługę. W przypadku korzystania z plików konfiguracji specjalista IT musi tylko zaktualizować plik konfiguracji, nie jest wymagana ponowna kompilacja. Jednak pliki konfiguracji mogą być złożone i trudne do utrzymania. Nie ma obsługi debugowania plików konfiguracji i elementów konfiguracji są przywoływania przez nazwy, co sprawia, że tworzenie plików konfiguracji jest podatne na błędy i trudne. Program WCF umożliwia również konfigurowanie usług w kodzie. We wcześniejszych wersjach programu WCF (4.0 i starszych) konfigurowanie usług w kodzie było łatwe w scenariuszach hostowanych samodzielnie, ServiceHost klasa umożliwiała konfigurowanie punktów końcowych i zachowań przed wywołaniem elementu ServiceHost.Open. Jednak w scenariuszach hostowanych w internecie nie masz dostępu do ServiceHost klasy. Aby skonfigurować usługę hostowaną w internecie, musiałeś utworzyć System.ServiceModel.ServiceHostFactory, który tworzył ServiceHostFactory i wykonywał wszelkie potrzebne konfiguracje. Począwszy od programu .NET Framework 4.5, program WCF zapewnia łatwiejszy sposób konfigurowania zarówno usług hostowanych samodzielnie, jak i hostowanych w internecie w kodzie. Aby uzyskać więcej informacji, zobacz Konfigurowanie usług WCF w kodzie.

Buforowanie ChannelFactory

Aplikacje klienckie WCF używają ChannelFactory<TChannel> klasy do tworzenia kanału komunikacyjnego z usługą WCF. Tworzenie ChannelFactory<TChannel> wystąpień wiąże się z pewnym obciążeniem, ponieważ obejmuje następujące operacje:

  1. Konstruowanie ContractDescription drzewa

  2. Odzwierciedlanie wszystkich wymaganych typów Wspólnego Typu Języka Uruchomieniowego (CLR)

  3. Konstruowanie stosu kanałowego

  4. Usuwanie zasobów

Aby zminimalizować to obciążenie, program WCF może buforować fabryki kanałów w przypadku korzystania z serwera proxy klienta WCF. Aby uzyskać więcej informacji, zobacz Fabryka kanałów i buforowanie.

Kompresja i koder binarny

Począwszy od WCF 4.5 koder binarny WCF dodaje obsługę kompresji. Typ kompresji jest skonfigurowany z właściwością CompressionFormat . Zarówno klient, jak i usługa muszą skonfigurować CompressionFormat właściwość . Kompresja będzie działać dla protokołów HTTP, HTTPS i TCP. Jeśli klient określa użycie kompresji, ale usługa nie obsługuje go, zgłaszany jest wyjątek protokołu wskazujący niezgodność protokołu. Aby uzyskać więcej informacji, zobacz Wybieranie kodera komunikatów.

protokół UDP

Dodano obsługę transportu UDP, który umożliwia programistom pisanie usług korzystających z komunikatów typu "wyślij i zapomnij". Klient wysyła komunikat do usługi i oczekuje braku odpowiedzi z usługi.

Obsługa wielu uwierzytelniania

Dodano obsługę wielu trybów uwierzytelniania obsługiwanych przez usługi IIS w jednym punkcie końcowym programu WCF podczas korzystania z transportu HTTP i zabezpieczeń transportu. Usługi IIS umożliwiają włączenie wielu trybów uwierzytelniania w katalogu wirtualnym. Ta funkcja umożliwia pojedynczemu punktowi końcowemu WCF obsługę wielu trybów uwierzytelniania w katalogu wirtualnym, w którym jest hostowana usługa WCF.

Obsługa sieci IDN

Dodano obsługę usług WCF z nazwami domen międzynarodowych. Aby uzyskać więcej informacji, zobacz WCF i nazwy domen międzynarodowych.

HttpClient

Dodano nową klasę o nazwie HttpClient , aby ułatwić pracę z żądaniami HTTP. Aby uzyskać więcej informacji, zobacz HttpClient i Wskazówki dotyczące korzystania z obiektu HttpClient.

Konfiguracja funkcji IntelliSense

Wartości atrybutów w plikach konfiguracji dla niestandardowych atrybutów zdefiniowanych w projekcie teraz obsługują funkcję IntelliSense, co ułatwia szybką i dokładną pracę z konfiguracjami.

Podpowiedzi konfiguracji

Elementy i atrybuty programu WCF mają teraz etykietki narzędzi w edytorze XML, aby łatwiej i dokładnie zidentyfikować cel elementu lub atrybutu.

Wklej dane jako klasy

W projekcie WCF typy danych zdefiniowane w formacie XML (takie jak uwidocznione w usłudze) mogą być wklejane bezpośrednio na stronie kodu. Typ XML zostanie wklejony jako typ CLR. Aby uzyskać więcej informacji, zobacz Generowanie klas typów danych z formatu XML .

WebServiceHost i domyślne punkty końcowe

W programie Visual Studio 2010 webServiceHost automatycznie utworzył domyślny punkt końcowy niezależnie od tego, czy jawnie określono punkt końcowy. W programie Visual Studio 2012 lub nowszym webServiceHost tworzy domyślny punkt końcowy tylko wtedy, gdy nie zostaną jawnie dodane żadne punkty końcowe. Jeśli klient oczekuje domyślnego punktu końcowego, możesz jawnie dodać punkt końcowy i wskazać go klientowi. Alternatywnie możesz poinformować usługę WCF o powrocie do poprzedniego zachowania, dodając następujące ustawienie do pliku konfiguracji aplikacji

<appSettings>
    <add key="wcf:webservicehost:enableautomaticendpointscompatability" value="true"/>
  </appSettings>

IHttpCookieContainerManager

Ten interfejs, udostępniany przez IChannelFactory<TChannel>program , sprawia, że praca z plikami cookie po stronie klienta jest znacznie łatwiejsza. Jeśli ustawienie AllowCookies ma wartość true w powiązaniu, możesz uzyskać dostęp do plików cookie przy użyciu następującego kodu:

IHttpCookieContainerManager cookieManager = factory.GetProperty<IHttpCookieContainerManager>();
System.Net.CookieContainer container = cookieManager.CookieContainer;

Następnie możesz pobrać lub ustawić pliki cookie z pliku CookieContainer. Jeśli ustawisz AllowCookies na false, możesz ręcznie pobrać pliki cookie za pomocą OperationContext i wysłać je w innych żądaniach przy użyciu innego OperationContext lub inspektora wiadomości. Interfejs IHttpCookieContainerManager umożliwia uwierzytelnianie użytkownika za pomocą usługi i używanie pliku cookie uwierzytelniania zwróconego przez usługę w celu uwierzytelnienia się w innych usługach.