Dela via


Nyheter i Windows Communication Foundation 4.5

I det här avsnittet beskrivs funktioner som är nya för Windows Communication Foundation (WCF) version 4.5.

gRPC som ett alternativ till WCF

gRPC är ett modernt RPC-ramverk som är ett populärt alternativ till WCF. gRPC bygger på HTTP/2, vilket ger ett antal fördelar jämfört med WCF, inklusive:

  • Prestanda: gRPC är mycket effektivare än WCF, särskilt för långvariga anslutningar.
  • Skalbarhet: gRPC är utformat för att skala till ett stort antal klienter och servrar.
  • Säkerhet: gRPC stöder en mängd olika säkerhetsmekanismer, inklusive TLS och autentisering.
  • Plattformsoberoende: gRPC är plattformsneutralt och kan användas med en mängd olika programmeringsspråk.

Mer information om hur du utvecklar eller migrerar WCF-appar till gRPC finns i:

WCF-förenklingsfunktioner

Mycket arbete har gjorts för att göra WCF 4.5-program enklare att utveckla och underhålla. Mer information finns i WCF-förenklingsfunktioner.

Aktivitetsbaserad Async-support

Som standard genererar Lägg till tjänstreferens metoder för aktivitetsre returnering av asynkrona tjänster. Detta görs för både synkrona och asynkrona metoder. På så sätt kan du anropa tjänståtgärderna asynkront med hjälp av den nya programmeringsmodellen Aktivitetsbaserad asynkron. När du anropar den genererade proxymetoden konstruerar WCF ett aktivitetsobjekt för att representera den asynkrona åtgärden och returnerar uppgiften till dig. Uppgiften slutförs när åtgärden har slutförts. När du implementerar en asynkron åtgärd kan du implementera den som en aktivitetsbaserad asynkron åtgärd. Mer information finns i Synkrona och asynkrona åtgärder.

Förenklade genererade konfigurationsfiler

När du lägger till en tjänstreferens i Visual Studio eller använder verktyget SvcUtil.exe genereras en klientkonfigurationsfil. I tidigare versioner av WCF innehöll dessa konfigurationsfiler värdet för varje bindningsegenskap även om dess värde är standardvärdet. I WCF 4.5 innehåller de genererade konfigurationsfilerna endast de bindningsegenskaper som är inställda på ett icke-standardvärde.

Mer information finns i WCF-förenklingsfunktioner.

Contract-First Development

WCF har nu stöd för kontrakt-första utveckling. Svcutil.exe har en /serviceContract-växel som gör att du kan generera tjänst- och datakontrakt från ett WSDL-dokument.

Lägg till tjänstreferens från ett portabelt delmängdsprojekt

Portabla delmängdsprojekt gör det möjligt för .NET-monteringsprogram att underhålla ett enda källträd och byggsystem samtidigt som de stöder flera .NET-plattformar (skrivbord, Silverlight, Windows Telefon och Xbox). Portabla delmängdsprojekt refererar endast till bärbara .NET-bibliotek som är sammansättningar som kan användas på valfri .NET-plattform. Utvecklarupplevelsen är densamma som att lägga till en tjänstreferens i andra WCF-klientprogram. Mer information finns i Lägg till tjänstreferens i ett portabelt delmängdsprojekt.

standardinställningen för ASP.NET kompatibilitetsläge har ändrats

WCF tillhandahåller ASP.NET kompatibilitetsläge för att ge utvecklare fullständig åtkomst till funktionerna i ASP.NET HTTP-pipeline när de skriver WCF-tjänster. Om du vill använda det här läget måste du ange aspNetCompatibilityEnabled attributet till true i <avsnittet serviceHostingEnvironment> i web.config. Dessutom måste alla tjänster i den här appenDomain ha RequirementsMode egenskapen inställd AllowedAspNetCompatibilityRequirementsAttribute eller Required. Som standard AspNetCompatibilityRequirementsAttribute är nu inställt på Allowed. Mer information finns i WCF-tjänster och ASP.NET.

Nya standardvärden för transport

För att förenkla konfigurationen har ett antal standardvärden för transportegenskaper ändrats. Mer information finns i WCF-förenklingsfunktioner.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas innehåller konfigurerbara kvotvärden för XML-ordlisteläsare som begränsar mängden minne som används av en kodare när ett meddelande skapas. Även om dessa kvoter kan konfigureras har standardvärdena ändrats för att minska risken för att en utvecklare måste ange dem explicit. Mer information finns i WCF-förenklingsfunktioner.

Verifiering av WCF-konfiguration

Som en del av byggprocessen i Visual Studio verifieras nu WCF-konfigurationsfiler för attribut som definierats i projektet. En lista över valideringsfel eller varningar visas i Visual Studio om verifieringen misslyckas.

Knappbeskrivningar för XML-redigeraren

För att hjälpa nya och befintliga WCF-tjänstutvecklare att konfigurera sina tjänster tillhandahåller Visual Studio XML-redigeraren nu knappbeskrivningar för varje konfigurationselement och dess egenskaper som ingår i tjänstkonfigurationsfilen.

Förbättringar av direktuppspelning

Stöd har lagts till för sann asynkron strömning där sändningssidan nu inte blockerar trådar om mottagarsidan inte läser eller går långsamt att läsa, vilket ökar skalbarheten. Tog bort begränsningen för meddelandebuffertning när en klient skickar ett strömmat meddelande till en IIS-värdbaserad WCF-tjänst. Mer information finns i WCF-förenklingsfunktioner.

Förenkla exponering av en slutpunkt via HTTPS med IIS

En HTTPS-protokollmappning har lagts till för att förenkla exponeringen av en slutpunkt via HTTPS. Om du vill aktivera en HTTPS-slutpunkt kontrollerar du att webbplatsen har en HTTPS-bindning och ett SSL-certifikat konfigurerat och sedan bara aktiverar HTTPS för den virtuella katalog som är värd för tjänsten. Om metadata är aktiverade för tjänsten exponeras de även via HTTPS.

Generera ett enda WSDL-dokument

Vissa WSDL-bearbetningsstackar från tredje part kan inte bearbeta WSDL-dokument som har beroenden för andra dokument via en xsd:import. Med WCF kan du nu ange att all WSDL-information ska returneras i ett enda dokument. Om du vill begära ett enda WSDL-dokument lägger du till "?singleWSDL" i URI:n när du begär metadata från tjänsten.

WebSocket-support

WebSockets är en teknik som ger sann dubbelriktad kommunikation via portarna 80 och 443 med prestandaegenskaper som liknar TCP. Två nya bindningar har lagts till för att stödja kommunikation via en WebSocket-transport. NetHttpBinding och NetHttpsBinding. Mer information finns i: Bindningar som tillhandahålls av systemet.

Nya standardvärden för transport

I följande tabell beskrivs de inställningar som har ändrats och var du hittar ytterligare information.

Property Ny standard Mer information finns i
channelInitializationTimeout NetTcpBinding 30 sekunder ChannelInitializationTimeout
listenBacklog NetTcpBinding 12 * antal processorer ListenBacklog
maxPendingAccepts Anslut ionOrientedTransportBindingElement

SMSvcHost.exe
2 * antal processorer för transport

4 * antal processorer för SMSvcHost.exe
MaxPendingAcceptsKonfigurera Net.TCP-portdelningstjänsten
maxPending Anslut ions Anslut ionOrientedTransportBindingElement 12 * antal processorer MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 sekunder Konfigurera Net.TCP-portdelningstjänsten

Konfigurera WCF-tjänster i Kod

Med Windows Communication Foundation (WCF) kan utvecklare konfigurera tjänster med hjälp av konfigurationsfiler eller kod. Konfigurationsfiler är användbara när en tjänst måste konfigureras när den har distribuerats. När du använder konfigurationsfiler behöver it-tekniker bara uppdatera konfigurationsfilen, ingen omkompilering krävs. Konfigurationsfiler kan dock vara komplexa och svåra att underhålla. Det finns inget stöd för felsökning av konfigurationsfiler och konfigurationselement refereras till av namn som gör redigering av konfigurationsfiler felbenägna och svåra. Med WCF kan du också konfigurera tjänster i kod. I tidigare versioner av WCF (4.0 och tidigare) var det enkelt att konfigurera tjänster i kod i scenarier med egen värd, ServiceHost klassen tillät dig att konfigurera slutpunkter och beteenden innan du anropade ServiceHost.Open. I scenarier med webbvärdar har du dock inte åtkomst till ServiceHost klassen. För att konfigurera en värdbaserad webbtjänst var du tvungen att skapa en System.ServiceModel.ServiceHostFactory som skapade ServiceHostFactory och utförde alla nödvändiga konfigurationer. Från och med .NET Framework 4.5 är WCF ett enklare sätt att konfigurera både lokalt installerade och webbaserade tjänster i kod. Mer information finns i Konfigurera WCF-tjänster i Kod.

ChannelFactory Cachelagring

WCF-klientprogram använder ChannelFactory<TChannel> klassen för att skapa en kommunikationskanal med en WCF-tjänst. Att skapa ChannelFactory<TChannel> instanser medför vissa omkostnader eftersom det omfattar följande åtgärder:

  1. ContractDescription Konstruera trädet

  2. Återspeglar alla nödvändiga CLR-typer

  3. Konstruera kanalstacken

  4. Disponera resurser

För att minimera detta kan WCF cachelagras kanalfabriker när du använder en WCF-klientproxy. Mer information finns i Channel Factory och Cachelagring.

Komprimering och binär kodare

Från och med WCF 4.5 lägger den binära WCF-kodaren till stöd för komprimering. Typen av komprimering konfigureras med egenskapen CompressionFormat . Både klienten och tjänsten måste konfigurera CompressionFormat egenskapen. Komprimering fungerar för HTTP-, HTTPS- och TCP-protokoll. Om en klient anger att använda komprimering men tjänsten inte stöder det genereras ett protokollfel som indikerar ett protokollfel. Mer information finns i Välja en meddelandekodare.

UDP

Stöd har lagts till för en UDP-transport som gör det möjligt för utvecklare att skriva tjänster som använder "fire and forget"-meddelanden. En klient skickar ett meddelande till en tjänst och förväntar sig inget svar från tjänsten.

Stöd för flera autentiseringar

Stöd har lagts till för att stödja flera autentiseringslägen, som stöds av IIS, på en enda WCF-slutpunkt när http-transport- och transportsäkerheten används. Med IIS kan du aktivera flera autentiseringslägen i en virtuell katalog. Med den här funktionen kan en enda WCF-slutpunkt stödja de flera autentiseringslägen som är aktiverade för den virtuella katalogen där WCF-tjänsten finns.

IDN-support

Stöd har lagts till för att tillåta WCF-tjänster med internationaliserade domännamn. Mer information finns i WCF och internationaliserade domännamn.

HttpClient

En ny klass med namnet HttpClient har lagts till för att göra det mycket enklare att arbeta med HTTP-begäranden. Mer information finns i HttpClient och Riktlinjer för att använda HttpClient.

Konfiguration IntelliSense

Attributvärden i konfigurationsfiler för anpassade attribut som definierats i projektet stöder nu IntelliSense för att underlätta arbetet med konfigurationer snabbt och korrekt.

Knappbeskrivningar för konfiguration

WCF-element och -attribut har nu knappbeskrivningar i XML-redigeraren för att enklare och mer exakt identifiera syftet med elementet eller attributet.

Klistra in data som klasser

I ett WCF-projekt kan datatyper som definierats i XML (till exempel exponeras i en tjänst) klistras in direkt på en kodsida. XML-typen klistras in som en CLR-typ. Mer information finns i Generera datatypklasser från XML .

WebServiceHost och standardslutpunkter

I Visual Studio 2010 skapade WebServiceHost automatiskt en standardslutpunkt oavsett om du uttryckligen angav en slutpunkt eller inte. I Visual Studio 2012 och senare skapar WebServiceHost bara en standardslutpunkt om inga slutpunkter uttryckligen läggs till. Om klienten förväntar sig standardslutpunkten kan du uttryckligen lägga till en slutpunkt och peka klienten till den. Du kan också be WCF att återgå till det tidigare beteendet genom att lägga till följande inställning i konfigurationsfilen för ditt program

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

IHttpCookieContainerManager

Det här gränssnittet, som exponeras av IChannelFactory<TChannel>, gör det mycket enklare att arbeta med cookies på klientsidan. När AllowCookies är inställt på true för bindningen kan du komma åt cookies med hjälp av följande kod:

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

Du kan sedan hämta eller ange cookies från CookieContainer. När AllowCookies är inställt på false kan du manuellt hämta cookies med hjälp av OperationContext och skicka dem i andra begäranden med hjälp av en annan OperationContext eller meddelandekontroll. Med gränssnittet IHttpCookieContainerManager kan du autentisera en användare med en tjänst och använda den autentiseringscookie som returneras av den tjänsten för att autentisera med andra tjänster.