Sdílet prostřednictvím


Co je nového ve WCF 4.5

Toto téma popisuje nové funkce windows Communication Foundation (WCF) verze 4.5.

gRPC jako alternativa k WCF

gRPC je moderní architektura RPC, která je oblíbenou alternativou wcf. GRPC je postaven na http/2, která poskytuje řadu výhod oproti WCF, včetně:

  • Výkon: gRPC je mnohem efektivnější než WCF, zejména pro dlouhotrvající připojení.
  • Škálovatelnost: GRPC je navržená tak, aby se škáluje na velký počet klientů a serverů.
  • Zabezpečení: gRPC podporuje celou řadu mechanismů zabezpečení, včetně protokolu TLS a ověřování.
  • Multiplatformní: gRPC je platformově neutrální a dá se použít s různými programovacími jazyky.

Další informace o vývoji nebo migraci aplikací WCF do gRPC najdete tady:

Funkce zjednodušení WCF

Hodně práce bylo provedeno, aby aplikace WCF 4.5 usnadnit vývoj a údržbu. Další informace najdete v tématu Funkce zjednodušení WCF.

Podpora asynchronní synchronizace na základě úloh

Ve výchozím nastavení funkce Add Service Reference generuje metody asynchronní operace služby vracející úlohy. To se provádí pro synchronní i asynchronní metody. To umožňuje volat operace služby asynchronně pomocí nového programovacího modelu založeného na úlohách. Když zavoláte vygenerovanou metodu proxy, WCF vytvoří objekt Task, který představuje asynchronní operaci a vrátí tuto úlohu vám. Úloha se dokončí po dokončení operace. Při implementaci asynchronní operace ji můžete implementovat jako asynchronní operaci založenou na úlohách. Další informace naleznete v tématu Synchronní a asynchronní operace.

Zjednodušené generované konfigurační soubory

Když v sadě Visual Studio přidáte odkaz na službu nebo použijete nástroj SvcUtil.exe, vygeneruje se konfigurační soubor klienta. V předchozích verzích WCF tyto konfigurační soubory obsahovaly hodnotu každé vlastnosti vazby, i když její hodnota je výchozí hodnota. Ve WCF 4.5 generované konfigurační soubory obsahují pouze vlastnosti vazby, které jsou nastaveny na ne-výchozí hodnotu.

Další informace najdete v tématu Funkce zjednodušení WCF.

Contract-First Development

WCF teď podporuje vývoj založený na kontraktech. Svcutil.exe má přepínač /serviceContract, který umožňuje generovat služby a datové kontrakty z dokumentu WSDL.

Přidání odkazu na službu z přenosného podmnožina projektu

Přenosné projekty podmnožina umožňují programátorům sestavení .NET udržovat jeden zdrojový strom a systém sestavení a současně podporovat více platforem .NET (desktop, Silverlight, Windows Telefon a Xbox). Přenosné projekty podmnožina odkazují pouze na přenosné knihovny .NET, které jsou sestavení, která lze použít na libovolné platformě .NET. Prostředí pro vývojáře je stejné jako přidání odkazu na službu v jakékoli jiné klientské aplikaci WCF. Další informace naleznete v tématu Přidání odkazu na službu v přenosném podmnožině projektu.

Výchozí změna režimu kompatibility ASP.NET

WCF poskytuje ASP.NET režim kompatibility, který vývojářům umožňuje úplný přístup k funkcím v kanálu ASP.NET HTTP při psaní služeb WCF. Chcete-li použít tento režim, je nutné nastavit aspNetCompatibilityEnabled atribut na hodnotu true v <části serviceHostingEnvironment> web.config. Kromě toho každá služba v této appDomain musí mít RequirementsMode vlastnost nastavena na AspNetCompatibilityRequirementsAttributeAllowed nebo Required. Ve výchozím nastavení AspNetCompatibilityRequirementsAttribute je nyní nastavena na Allowedhodnotu . Další informace najdete v tématu Služby WCF a ASP.NET.

Nové výchozí hodnoty přenosu

Kvůli zjednodušení konfigurace došlo ke změně řady výchozích hodnot transportních vlastností. Další informace najdete v tématu Funkce zjednodušení WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas obsahuje konfigurovatelné hodnoty kvót pro čtečky slovníku XML, které omezují množství paměti využívané kodérem při vytváření zprávy. I když jsou tyto kvóty konfigurovatelné, výchozí hodnoty se změnily tak, aby se snížila možnost, že je vývojář bude muset explicitně nastavit. Další informace najdete v tématu Funkce zjednodušení WCF.

Ověřování konfigurace WCF

V rámci procesu sestavení v sadě Visual Studio se konfigurační soubory WCF nyní ověřují pro atributy definované v rámci projektu. V sadě Visual Studio se zobrazí seznam chyb nebo upozornění ověření, pokud se ověření nezdaří.

Popisy editoru XML

Editor XML sady Visual Studio teď poskytuje popisy pro každý element konfigurace a jeho vlastnosti, které jsou součástí konfiguračního souboru služby.

Vylepšení streamování

Byla přidána podpora skutečného asynchronního streamování, kde teď strana odeslání neblokuje vlákna v případě, že na straně příjmu není čtení nebo pomalé čtení, čímž se zvyšuje škálovatelnost. Odebrání omezení ukládání zpráv do vyrovnávací paměti, když klient odešle streamovanou zprávu službě WCF hostované službě IIS. Další informace najdete v tématu Funkce zjednodušení WCF.

Zjednodušení zveřejnění koncového bodu přes PROTOKOL HTTPS se službou IIS

Bylo přidáno mapování protokolu HTTPS, které zjednodušilo zveřejnění koncového bodu přes PROTOKOL HTTPS. Pokud chcete povolit koncový bod HTTPS, ujistěte se, že váš web má nakonfigurovanou vazbu HTTPS a certifikát SSL, a pak jednoduše povolte HTTPS pro virtuální adresář, který je hostitelem služby. Pokud je pro službu povolená metadata, zobrazí se také prostřednictvím protokolu HTTPS.

Generování jednoho dokumentu WSDL

Některé zásobníky zpracování WSDL třetích stran nemůžou zpracovávat dokumenty WSDL, které mají závislosti na jiných dokumentech prostřednictvím xsd:import. WCF teď umožňuje určit, že se všechny informace WSDL vrátí v jednom dokumentu. Pokud chcete požádat o jeden dokument WSDL, připojte k identifikátoru URI "?singleWSDL" při vyžádání metadat ze služby.

Podpora protokolu WebSocket

WebSockets je technologie, která poskytuje skutečnou obousměrnou komunikaci přes porty 80 a 443 s charakteristikou výkonu podobnou protokolu TCP. Byly přidány dvě nové vazby pro podporu komunikace přes přenos WebSocket. NetHttpBinding a NetHttpsBinding. Další informace naleznete v tématu: Systémové vazby.

Nové výchozí hodnoty přenosu

Následující tabulka popisuje nastavení, která se změnila a kde najít další informace.

Vlastnost Zapnout Nové výchozí Další informace najdete v tématu
channelInitializationTimeout NetTcpBinding 30 sekund ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * počet procesorů ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * počet procesorů pro přepravu

4 * počet procesorů pro SMSvcHost.exe
MaxPendingAcceptsKonfigurace služby sdílení portů Net.TCP
maxPending Připojení ions ConnectionOrientedTransportBindingElement 12 * počet procesorů MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 sekund Konfigurace služby sdílení portů Net.TCP

Konfigurace služeb WCF v kódu

Windows Communication Foundation (WCF) umožňuje vývojářům konfigurovat služby pomocí konfiguračních souborů nebo kódu. Konfigurační soubory jsou užitečné, když je potřeba nakonfigurovat službu po nasazení. Při použití konfiguračních souborů potřebuje IT specialista pouze aktualizovat konfigurační soubor, nevyžaduje se žádná rekompilace. Konfigurační soubory ale můžou být složité a obtížně udržovatelné. Na konfigurační soubory a elementy konfigurace ladění se odkazují názvy, které vytváření konfiguračních souborů znesnadňuje a ztěžuje. WCF také umožňuje konfigurovat služby v kódu. Ve starších verzích WCF (4.0 a starších) konfigurace služeb v kódu byla snadná ve scénářích v místním prostředí, ServiceHost třída vám umožnila konfigurovat koncové body a chování před voláním ServiceHost.Open. Ve scénářích hostovaných na webu ale nemáte přístup ke ServiceHost třídě. Pokud chcete nakonfigurovat službu hostované na webu, museli jste vytvořit System.ServiceModel.ServiceHostFactory vytvořenou ServiceHostFactory službu, kterou jste provedli a provedli jakoukoli potřebnou konfiguraci. Od rozhraní .NET Framework 4.5 poskytuje WCF jednodušší způsob, jak nakonfigurovat služby hostované v kódu i služby hostované na webu. Další informace naleznete v tématu Konfigurace služeb WCF v kódu.

Ukládání do mezipaměti ChannelFactory

Klientské aplikace WCF používají ChannelFactory<TChannel> třídu k vytvoření komunikačního kanálu se službou WCF. Vytváření ChannelFactory<TChannel> instancí způsobuje určité režijní náklady, protože zahrnuje následující operace:

  1. ContractDescription Vytvoření stromu

  2. Reflexe všech požadovaných typů CLR

  3. Vytvoření zásobníku kanálů

  4. Disposing of resources

Kvůli minimalizaci této režie může WCF ukládat objekty pro vytváření kanálů do mezipaměti při použití proxy klienta WCF. Další informace najdete v tématu Channel Factory a Ukládání do mezipaměti.

Komprese a binární kodér

Počínaje WCF 4.5 binární kodér WCF přidává podporu komprese. Typ komprese je nakonfigurován s CompressionFormat vlastností. Klient i služba musí vlastnost nakonfigurovat CompressionFormat . Komprese bude fungovat pro protokoly HTTP, HTTPS a TCP. Pokud klient určí použití komprese, ale služba ji nepodporuje, vyvolá se výjimka protokolu, která značí neshodu protokolu. Další informace najdete v tématu Volba kodéru zpráv.

UDP

Byla přidána podpora přenosu UDP, která vývojářům umožňuje psát služby, které používají zasílání zpráv "fire and forget". Klient odešle do služby zprávu a neočekává od služby žádnou odpověď.

Podpora více ověřování

Byla přidána podpora pro podporu více režimů ověřování, jak podporuje služba IIS, na jednom koncovém bodu WCF při použití přenosu HTTP a zabezpečení přenosu. Služba IIS umožňuje povolit více režimů ověřování ve virtuálním adresáři. Tato funkce umožňuje jednomu koncovému bodu WCF podporovat více režimů ověřování povolených pro virtuální adresář, kde je služba WCF hostovaná.

Podpora IDN

Byla přidána podpora umožňující služby WCF s internationalizovanými názvy domén. Další informace naleznete v tématu WCF a Internationalized Domain Names.

HttpClient

Byla přidána nová třída, HttpClient která usnadňuje práci s požadavky HTTP. Další informace najdete v tématu HttpClient a pokyny pro použití HttpClient.

Konfigurace IntelliSense

Hodnoty atributů v konfiguračních souborech pro vlastní atributy definované v projektu teď podporují technologii IntelliSense, aby se usnadnila rychlá a přesná práce s konfiguracemi.

Popisy konfigurace

Prvky a atributy WCF teď obsahují popisy v editoru XML, aby bylo možné snadněji a přesněji identifikovat účel elementu nebo atributu.

Vložit data jako třídy

V projektu WCF je možné datové typy definované v jazyce XML (jako jsou vystavené ve službě) vložit přímo do znakové stránky. Typ XML se vloží jako typ CLR. Další podrobnosti najdete v tématu Generování tříd datových typů z XML .

WebServiceHost a výchozí koncové body

V sadě Visual Studio 2010 webServiceHost automaticky vytvořil výchozí koncový bod bez ohledu na to, jestli jste explicitně zadali koncový bod. V sadě Visual Studio 2012 a novější webServiceHost vytvoří výchozí koncový bod pouze v případě, že nejsou explicitně přidány žádné koncové body. Pokud váš klient očekává výchozí koncový bod, můžete explicitně přidat koncový bod a nasměrovat na něj klienta. Případně můžete wcf říct, aby se vrátil k předchozímu chování přidáním následujícího nastavení do konfiguračního souboru aplikace.

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

IHttpCookieContainerManager

Toto rozhraní, které je vystaveno IChannelFactory<TChannel>, usnadňuje práci se soubory cookie na straně klienta. Pokud je vlastnost AllowCookies pro vazbu nastavena na hodnotu true, můžete k souborům cookie přistupovat pomocí následujícího kódu:

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

Soubory cookie pak můžete načíst nebo nastavit z souboru CookieContainer. Pokud je vlastnost AllowCookies nastavená na hodnotu false, můžete soubory cookie ručně načíst a OperationContext odeslat v jiných požadavcích pomocí jiného OperationContext inspektoru zpráv. Rozhraní IHttpCookieContainerManager umožňuje ověřit uživatele ve službě a použít ověřovací soubor cookie vrácený danou službou k ověření s jinými službami.