Share via


Wat is er nieuw in Windows Communication Foundation 4.5

In dit onderwerp worden functies besproken die nieuw zijn in WCF-versie (Windows Communication Foundation) versie 4.5.

gRPC als alternatief voor WCF

gRPC is een modern RPC-framework dat een populair alternatief is voor WCF. gRPC is gebouwd op HTTP/2, wat een aantal voordelen biedt ten opzichte van WCF, waaronder:

  • Prestaties: gRPC is veel efficiënter dan WCF, met name voor langlopende verbindingen.
  • Schaalbaarheid: gRPC is ontworpen om te schalen naar grote aantallen clients en servers.
  • Beveiliging: gRPC ondersteunt verschillende beveiligingsmechanismen, waaronder TLS en verificatie.
  • Platformoverschrijdend: gRPC is platformneutraal en kan worden gebruikt met verschillende programmeertalen.

Zie voor meer informatie over het ontwikkelen of migreren van WCF-apps naar gRPC:

WCF-vereenvoudigingsfuncties

Er is veel gedaan om WCF 4.5-toepassingen gemakkelijker te ontwikkelen en te onderhouden. Zie WCF-vereenvoudigingsfuncties voor meer informatie.

Async-ondersteuning op basis van taken

Met Serviceverwijzing toevoegen worden standaard asynchrone asynchrone servicebewerkingsmethoden gegenereerd. Dit wordt gedaan voor zowel synchrone als asynchrone methoden. Hierdoor kunt u de servicebewerkingen asynchroon aanroepen met behulp van het nieuwe asynchrone programmeermodel op basis van taken. Wanneer u de gegenereerde proxymethode aanroept, maakt WCF een taakobject dat de asynchrone bewerking vertegenwoordigt en die taak naar u retourneert. De taak wordt voltooid wanneer de bewerking is voltooid. Wanneer u een asynchrone bewerking implementeert, kunt u deze implementeren als een asynchrone bewerking op basis van taken. Zie Synchrone en Asynchrone bewerkingen voor meer informatie.

Vereenvoudigde gegenereerde configuratiebestanden

Wanneer u een servicereferentie toevoegt in Visual Studio of het hulpprogramma SvcUtil.exe gebruikt, wordt er een clientconfiguratiebestand gegenereerd. In eerdere versies van WCF bevatten deze configuratiebestanden de waarde van elke bindingseigenschap, zelfs als de waarde de standaardwaarde is. In WCF 4.5 bevatten de gegenereerde configuratiebestanden alleen de bindingseigenschappen die zijn ingesteld op een niet-standaardwaarde.

Zie WCF-vereenvoudigingsfuncties voor meer informatie.

Contract-First Development

WCF biedt nu ondersteuning voor contract-first-ontwikkeling. De svcutil.exe heeft een /serviceContract-switch waarmee u service- en gegevenscontracten kunt genereren vanuit een WSDL-document.

Servicereferentie toevoegen vanuit een draagbaar subsetproject

Draagbare subsetprojecten stellen .NET-assemblyprogrammeurs in staat om één bronstructuur en bouwsysteem te onderhouden terwijl ze nog steeds meerdere .NET-platforms ondersteunen (desktop, Silverlight, Windows Telefoon en Xbox). Draagbare subsetprojecten verwijzen alleen naar .NET portable libraries die assembly's zijn die kunnen worden gebruikt op elk .NET-platform. De ontwikkelaarservaring is hetzelfde als het toevoegen van een servicereferentie in een andere WCF-clienttoepassing. Zie Servicereferentie toevoegen in een draagbaar subsetproject voor meer informatie.

ASP.NET compatibiliteitsmodus standaard gewijzigd

WCF biedt ASP.NET compatibiliteitsmodus om ontwikkelaars volledige toegang te verlenen tot de functies in de ASP.NET HTTP-pijplijn bij het schrijven van WCF-services. Als u deze modus wilt gebruiken, moet u het aspNetCompatibilityEnabled kenmerk instellen op true in de <sectie serviceHostingEnvironment> van web.config. Daarnaast moet elke service in dit appDomain de RequirementsMode eigenschap hebben ingesteld Allowed op AspNetCompatibilityRequirementsAttribute of Required. De standaardinstelling AspNetCompatibilityRequirementsAttribute is nu ingesteld op Allowed. Zie WCF-services en ASP.NET voor meer informatie.

Nieuwe standaardwaarden voor transport

Om de configuratie te vereenvoudigen, zijn er een aantal standaardwaarden voor transporteigenschappen gewijzigd. Zie WCF-vereenvoudigingsfuncties voor meer informatie.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas bevat configureerbare quotumwaarden voor XML-woordenlijstlezers die de hoeveelheid geheugen beperken die door een encoder wordt gebruikt tijdens het maken van een bericht. Hoewel deze quota kunnen worden geconfigureerd, zijn de standaardwaarden gewijzigd om de mogelijkheid te verminderen dat een ontwikkelaar deze expliciet moet instellen. Zie WCF-vereenvoudigingsfuncties voor meer informatie.

WCF-configuratievalidatie

Als onderdeel van het buildproces in Visual Studio worden WCF-configuratiebestanden nu gevalideerd voor kenmerken die in het project zijn gedefinieerd. Er wordt een lijst met validatiefouten of waarschuwingen weergegeven in Visual Studio als de validatie mislukt.

Knopinfo voor XML-editor

Om nieuwe en bestaande WCF-serviceontwikkelaars te helpen hun services te configureren, biedt de Xml-editor van Visual Studio nu knopinfo voor elk configuratie-element en de eigenschappen ervan die deel uitmaken van het serviceconfiguratiebestand.

Streamingverbeteringen

Er is ondersteuning toegevoegd voor echte asynchrone streaming waarbij de verzendzijde nu geen threads blokkeert als de ontvangstzijde niet leest of traag is in het lezen, waardoor de schaalbaarheid toeneemt. De beperking van berichtbuffering is verwijderd wanneer een client een gestreamd bericht verzendt naar een DOOR IIS gehoste WCF-service. Zie WCF-vereenvoudigingsfuncties voor meer informatie.

Het beschikbaar maken van een eindpunt via HTTPS vereenvoudigen met IIS

Er is een HTTPS-protocoltoewijzing toegevoegd om het beschikbaar maken van een eindpunt via HTTPS te vereenvoudigen. Als u een HTTPS-eindpunt wilt inschakelen, moet u ervoor zorgen dat uw website een HTTPS-binding en SSL-certificaat heeft geconfigureerd en schakelt u https in voor de virtuele map die als host fungeert voor de service. Als metagegevens zijn ingeschakeld voor de service, wordt deze ook weergegeven via HTTPS.

Eén WSDL-document genereren

Sommige WSDL-verwerkingsstacks van derden kunnen geen WSDL-documenten verwerken die afhankelijk zijn van andere documenten via een xsd:import. Met WCF kunt u nu opgeven dat alle WSDL-gegevens in één document worden geretourneerd. Als u één WSDL-document wilt aanvragen, voegt u '?singleWSDL' toe aan de URI bij het aanvragen van metagegevens van de service.

Ondersteuning voor WebSocket

WebSockets is een technologie die echte bidirectionele communicatie biedt via poorten 80 en 443 met prestatiekenmerken die vergelijkbaar zijn met TCP. Er zijn twee nieuwe bindingen toegevoegd ter ondersteuning van communicatie via een WebSocket-transport. NetHttpBinding en NetHttpsBinding. Zie voor meer informatie: Door het systeem geleverde bindingen.

Nieuwe standaardwaarden voor transport

In de volgende tabel worden de instellingen beschreven die zijn gewijzigd en waar u aanvullende informatie kunt vinden.

Eigenschappen Uit Nieuwe standaardwaarde Zie voor meer informatie
channelInitializationTimeout NetTcpBinding 30 seconden ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * aantal processors ListenBacklog
maxPendingAccepts Verbinding maken ionOrientedTransportBindingElement

SMSvcHost.exe
2 * aantal verwerkers voor transport

4 * aantal processors voor SMSvcHost.exe
MaxPendingAcceptsDe Net.TCP Port Sharing-service configureren
maxPending Verbinding maken ions Verbinding maken ionOrientedTransportBindingElement 12 * aantal processors MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 seconden De Net.TCP Port Sharing-service configureren

WCF-services configureren in code

Met Windows Communication Foundation (WCF) kunnen ontwikkelaars services configureren met behulp van configuratiebestanden of code. Configuratiebestanden zijn handig wanneer een service moet worden geconfigureerd nadat deze is geïmplementeerd. Wanneer u configuratiebestanden gebruikt, hoeft een IT-professional alleen het configuratiebestand bij te werken. Er is geen hercompilatie vereist. Configuratiebestanden kunnen echter complex en moeilijk te onderhouden zijn. Er is geen ondersteuning voor foutopsporing van configuratiebestanden en configuratie-elementen die verwijzen naar namen die het ontwerpen van configuratiebestanden foutgevoelig en moeilijk maken. Met WCF kunt u ook services in code configureren. In eerdere versies van WCF (4.0 en eerder) was het configureren van services in code eenvoudig in zelf-hostende scenario's, ServiceHost waardoor u eindpunten en gedrag kon configureren voordat u ServiceHost.Open aanroept. In gehoste webscenario's hebt u echter geen toegang tot de ServiceHost klasse. Als u een gehoste webservice wilt configureren, moest u een System.ServiceModel.ServiceHostFactory service maken die de ServiceHostFactory benodigde configuratie heeft gemaakt en uitgevoerd. Vanaf .NET Framework 4.5 biedt WCF een eenvoudigere manier om zowel zelf-hostende als web-gehoste services in code te configureren. Zie WCF-services configureren in Code voor meer informatie.

ChannelFactory Caching

WCF-clienttoepassingen gebruiken de ChannelFactory<TChannel> klasse om een communicatiekanaal met een WCF-service te maken. Het maken van ChannelFactory<TChannel> exemplaren brengt enige overhead met zich mee omdat dit de volgende bewerkingen omvat:

  1. ContractDescription De structuur samenstellen

  2. Alle vereiste CLR-typen weergeven

  3. De kanaalstack samenstellen

  4. Resources verwijderen

Om deze overhead te minimaliseren, kan WCF kanaalfactory's in de cache opslaan wanneer u een WCF-clientproxy gebruikt. Zie Channel Factory en Caching voor meer informatie.

Compressie en het binaire coderingsprogramma

Vanaf WCF 4.5 voegt de binaire WCF-encoder ondersteuning toe voor compressie. Het type compressie wordt geconfigureerd met de CompressionFormat eigenschap. Zowel de client als de service moet de CompressionFormat eigenschap configureren. Compressie werkt voor HTTP-, HTTPS- en TCP-protocollen. Als een client aangeeft dat compressie moet worden gebruikt, maar de service deze niet ondersteunt, wordt er een protocol-uitzondering gegenereerd die aangeeft dat het protocol niet overeenkomt. Zie Een berichtcoderingsprogramma kiezen voor meer informatie.

UDP

Er is ondersteuning toegevoegd voor een UDP-transport waarmee ontwikkelaars services kunnen schrijven die gebruikmaken van 'fire and forget'-berichten. Een client verzendt een bericht naar een service en verwacht geen reactie van de service.

Ondersteuning voor meervoudige verificatie

Er is ondersteuning toegevoegd ter ondersteuning van meerdere verificatiemodi, zoals ondersteund door IIS, op één WCF-eindpunt bij het gebruik van de HTTP-transport- en transportbeveiliging. Met IIS kunt u meerdere verificatiemodi inschakelen in een virtuele map. Met deze functie kan één WCF-eindpunt ondersteuning bieden voor de meerdere verificatiemodi die zijn ingeschakeld voor de virtuele map waar de WCF-service wordt gehost.

IDN-ondersteuning

Er is ondersteuning toegevoegd om WCF-services met geinternationaliseerde domeinnamen toe te staan. Zie WCF en geinternationaliseerde domeinnamen voor meer informatie.

HttpClient

Er is een nieuwe klasse HttpClient toegevoegd die is toegevoegd om het werken met HTTP-aanvragen veel eenvoudiger te maken. Zie en richtlijnen voor het gebruik van HttpClient voor meer informatieHttpClient.

Configuratie intelliSense

Kenmerkwaarden in configuratiebestanden voor aangepaste kenmerken die in het project zijn gedefinieerd, ondersteunen nu IntelliSense om het werken met configuraties snel en nauwkeurig te vergemakkelijken.

Knopinfo voor configuratie

WCF-elementen en -kenmerken hebben nu knopinfo in de XML-editor om het doel van het element of kenmerk gemakkelijker en nauwkeuriger te identificeren.

Gegevens plakken als klassen

In een WCF-project kunnen gegevenstypen die zijn gedefinieerd in XML (zoals worden weergegeven in een service) rechtstreeks in een codepagina worden geplakt. Het XML-type wordt geplakt als een CLR-type. Zie Gegevenstypeklassen genereren uit XML voor meer informatie.

WebServiceHost en standaardeindpunten

In Visual Studio 2010 heeft WebServiceHost automatisch een standaardeindpunt gemaakt, ongeacht of u een eindpunt expliciet hebt opgegeven of niet. In Visual Studio 2012 en hoger maakt WebServiceHost alleen een standaardeindpunt als er geen eindpunten expliciet worden toegevoegd. Als uw client het standaardeindpunt verwacht, kunt u expliciet een eindpunt toevoegen en de client ernaar verwijzen. U kunt WCF ook vertellen om terug te keren naar het vorige gedrag door de volgende instelling toe te voegen aan het configuratiebestand van uw toepassing

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

IHttpCookieContainerManager

Deze interface, beschikbaar gesteld door IChannelFactory<TChannel>, maakt het werken met cookies aan de clientzijde veel eenvoudiger. Wanneer AllowCookies is ingesteld op true op de binding, kunt u cookies openen met behulp van de volgende code:

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

Vervolgens kunt u de cookies ophalen of instellen van de CookieContainer. Wanneer AllowCookies is ingesteld op false, kunt u de cookies handmatig ophalen en OperationContext verzenden in andere aanvragen met behulp van een andere OperationContext of berichtcontrole. Met de IHttpCookieContainerManager-interface kunt u een gebruiker verifiëren met een service en de verificatiecookie gebruiken die door die service wordt geretourneerd om te verifiëren met andere services.