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 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:
- Waarom raden we gRPC aan voor WCF-ontwikkelaars
- WCF vergelijken met gRPC
- Inleiding tot gRPC voor WCF-ontwikkelaars
Er is veel gedaan om WCF 4.5-toepassingen gemakkelijker te ontwikkelen en te onderhouden. Zie WCF-vereenvoudigingsfuncties voor meer informatie.
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.
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.
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.
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.
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.
Om de configuratie te vereenvoudigen, zijn er een aantal standaardwaarden voor transporteigenschappen gewijzigd. Zie WCF-vereenvoudigingsfuncties voor meer informatie.
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.
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.
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.
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.
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.
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.
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.
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 |
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.
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:
ContractDescription De structuur samenstellen
Alle vereiste CLR-typen weergeven
De kanaalstack samenstellen
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.
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.
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.
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.
Er is ondersteuning toegevoegd om WCF-services met geinternationaliseerde domeinnamen toe te staan. Zie WCF en geinternationaliseerde domeinnamen voor meer informatie.
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.
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.
WCF-elementen en -kenmerken hebben nu knopinfo in de XML-editor om het doel van het element of kenmerk gemakkelijker en nauwkeuriger te identificeren.
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.
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>
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.