Udostępnij za pośrednictwem


Co nowego w wersji 4.5 programu WCF (Windows Communication Foundation)?

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 upraszczania 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 asynchronizowa 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.

Programowanie kontraktu pierwszego kontraktu

WCF ma teraz wsparcie dla opracowywania kontraktów po raz pierwszy. Svcutil.exe ma przełącznik /serviceContract, który umożliwia generowanie kontraktów usług i danych z dokumentu WSDL.

Dodawanie odwołania do usługi z przenośnego projektu podzestawu

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 (desktop, Silverlight, Windows Telefon 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. Środowisko deweloperskie jest takie samo jak dodawanie 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).

ASP.NET tryb zgodności został zmieniony domyślnie

Program WCF zapewnia ASP.NET tryb zgodności umożliwiający deweloperom pełny dostęp do funkcji w potoku HTTP ASP.NET podczas pisania usług WCF. Aby użyć tego trybu, należy ustawić aspNetCompatibilityEnabled atrybut na wartość true w <sekcji serviceHostingEnvironment> pliku web.config. Ponadto każda usługa w tej aplikacjiDomain musi mieć właściwość ustawioną RequirementsMode na AspNetCompatibilityRequirementsAttribute wartość Allowed lub Required. Domyślnie AspNetCompatibilityRequirementsAttribute jest teraz ustawiona wartość 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.

Etykietki narzędzi 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ę rzeczywistego przesyłania strumieniowego asynchronicznego, gdzie strona wysyłania nie blokuje teraz wątków, jeśli strona odbierająca nie odczytuje lub nie działa wolno w odczytywaniu, co zwiększa skalowalność. Usunięto ograniczenie buforowania komunikatów, gdy klient wysyła strumień komunikatu do hostowanej usługi WCF usług 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 dostarczone 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.

Właściwości Włączone Nowa wartość domyślna Aby uzyskać więcej informacji, zobacz
channelInitializationTimeout NetTcpBinding 30 sekund ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * liczba procesorów ListenBacklog
Maxpendingaccepts ConnectionOrientedTransportBindingElement

Smsvchost.exe
2 * liczba procesorów do transportu

4 * liczba procesorów dla SMSvcHost.exe
MaxPendingAcceptsKonfigurowanie usługi współużytkowania portów Net.TCP
maxPending Połączenie ions ConnectionOrientedTransportBindingElement 12 * liczba procesorów MaxPendingConnections
Receivetimeout Smsvchost.exe 30 sekund Konfigurowanie usługi współużytkowania 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, musisz utworzyć usługę, która System.ServiceModel.ServiceHostFactory utworzyła ServiceHostFactory i wykonała wymaganą konfigurację. 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. Emocje wszystkich wymaganych typów CLR

  3. Konstruowanie stosu kanału

  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 Channel Factory 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.

UDP

Dodano obsługę transportu UDP, który umożliwia deweloperom pisanie usług korzystających z komunikatów "fire and forget". 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ę zezwalania na usługi 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 atrybutów niestandardowych zdefiniowanych w projekcie obsługują teraz funkcję IntelliSense, aby ułatwić pracę z konfiguracjami szybko i dokładnie.

Etykietki narzędzi 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 ustawienie AllowCookies ma wartość false, możesz ręcznie pobrać pliki cookie i OperationContext 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.