Condividi tramite


Novità di Windows Communication Foundation 4.5

Questo argomento illustra le funzionalità nuove di Windows Communication Foundation (WCF) versione 4.5.

gRPC come alternativa a WCF

gRPC è un framework RPC moderno che è un'alternativa comune a WCF. gRPC è basato su HTTP/2, che offre numerosi vantaggi rispetto a WCF, tra cui:

  • Prestazioni: gRPC è molto più efficiente di WCF, soprattutto per le connessioni a esecuzione prolungata.
  • Scalabilità: gRPC è progettato per adattarsi a un numero elevato di client e server.
  • Sicurezza: gRPC supporta un'ampia gamma di meccanismi di sicurezza, tra cui TLS e autenticazione.
  • Multipiattaforma: gRPC è indipendente dalla piattaforma e può essere usato con un'ampia gamma di linguaggi di programmazione.

Per altre informazioni sullo sviluppo o la migrazione di app WCF a gRPC, vedere:

Funzionalità di semplificazione WCF

È stato fatto molto lavoro per semplificare lo sviluppo e la manutenzione delle applicazioni WCF 4.5. Per altre informazioni, vedere Funzionalità di semplificazione WCF.

Supporto asincrono basato su attività

Per impostazione predefinita, Add Service Reference genera metodi di operazione del servizio asincroni che restituiscono un oggetto Task. Questa operazione viene eseguita sia per i metodi sincroni che per i metodi asincroni. In questo modo è possibile chiamare le operazioni del servizio in modo asincrono utilizzando il nuovo modello di programmazione asincrono basato su Task. Quando si chiama il metodo proxy generato, WCF costruisce un oggetto Task per rappresentare l'operazione asincrona e restituisce quel Task. L'attività si completa al termine dell'operazione. Quando si implementa un'operazione asincrona, è possibile implementarla come operazione asincrona basata su attività. Per altre informazioni, vedere Operazioni sincrone e asincrone.

File di configurazione generati semplificati

Quando si aggiunge un riferimento al servizio in Visual Studio o si usa lo strumento di SvcUtil.exe, viene generato un file di configurazione client. Nelle versioni precedenti di WCF questi file di configurazione contengono il valore di ogni proprietà di associazione anche se il relativo valore è il valore predefinito. In WCF 4.5 i file di configurazione generati contengono solo le proprietà di associazione impostate su un valore non predefinito.

Per altre informazioni, vedere Funzionalità di semplificazione WCF.

Sviluppo Contract-First

WCF ora supporta lo sviluppo orientato al contratto. Il svcutil.exe include un'opzione /serviceContract che consente di generare contratti di servizio e dati da un documento WSDL.

Aggiungere un riferimento al servizio da un progetto Portable Subset

I progetti subset portabili consentono ai programmatori di assembly .NET di gestire un singolo albero di origine e di compilare un sistema, supportando comunque più piattaforme .NET (desktop, Silverlight, Windows Phone e Xbox). I progetti subset portabili .NET fanno riferimento solo a librerie portabili .NET che possono essere utilizzati su qualsiasi piattaforma .NET. L'esperienza di sviluppo equivale all'aggiunta di un riferimento al servizio all'interno di qualsiasi altra applicazione client WCF. Per altre informazioni, vedere Aggiungere riferimenti al servizio in un progetto di subset portabile.

La modalità predefinita di compatibilità di ASP.NET è stata modificata

WCF fornisce ASP.NET modalità di compatibilità per concedere agli sviluppatori l'accesso completo alle funzionalità nella pipeline HTTP ASP.NET durante la scrittura di servizi WCF. Per usare questa modalità, è necessario impostare l'attributo aspNetCompatibilityEnabled su true nella <sezione serviceHostingEnvironment> di web.config. Inoltre, qualsiasi servizio in questo dominio applicazione deve avere la proprietà RequirementsMode impostata su AspNetCompatibilityRequirementsAttribute, Allowed o Required. Per impostazione predefinita AspNetCompatibilityRequirementsAttribute è ora impostato su Allowed. Per altre informazioni, vedere Servizi WCF e ASP.NET.

Nuovi valori predefiniti per il trasporto

Per semplificare la configurazione sono stati modificati diversi valori predefiniti delle proprietà di trasporto. Per altre informazioni, vedere Funzionalità di semplificazione WCF.

XmlDictionaryReaderQuotas

XmlDictionaryReaderQuotas contiene valori di quota configurabili per i lettori di dizionario XML che limitano la quantità di memoria utilizzata da un codificatore durante la creazione di un messaggio. Anche se queste quote sono configurabili, i valori predefiniti sono stati modificati per ridurre la possibilità che uno sviluppatore dovrà impostarli in modo esplicito. Per altre informazioni, vedere Funzionalità di semplificazione WCF.

Convalida della configurazione WCF

Nell'ambito del processo di compilazione all'interno di Visual Studio, i file di configurazione WCF vengono ora convalidati per gli attributi definiti all'interno del progetto. In Visual Studio viene visualizzato un elenco di errori o avvisi di convalida se la convalida non riesce.

Suggerimenti dell'editor XML

Per consentire agli sviluppatori di servizi WCF nuovi ed esistenti di configurare i servizi, l'editor XML di Visual Studio fornisce ora descrizioni comando per ogni elemento di configurazione e le relative proprietà che fanno parte del file di configurazione del servizio.

Miglioramenti dello streaming

Aggiunto supporto per la trasmissione asincrona vera, dove la parte trasmittente ora non blocca i thread se la parte ricevente non sta leggendo o è lenta nella lettura, aumentando così la scalabilità dei processi. È stata rimossa la limitazione del buffer dei messaggi quando un client invia un messaggio trasmesso a un servizio WCF ospitato in IIS. Per altre informazioni, vedere Funzionalità di semplificazione WCF.

Semplificazione dell'esposizione di un endpoint tramite HTTPS con IIS

È stato aggiunto un mapping del protocollo HTTPS per semplificare l'esposizione di un endpoint tramite HTTPS. Per abilitare un endpoint HTTPS, verificare che nel sito Web sia configurata un'associazione HTTPS e un certificato SSL e quindi abilitare semplicemente HTTPS per la directory virtuale che ospita il servizio. Se i metadati sono abilitati per il servizio, verranno esposti anche tramite HTTPS.

Generazione di un singolo documento WSDL

Alcuni stack di elaborazione WSDL di terze parti non sono in grado di elaborare documenti WSDL con dipendenze da altri documenti tramite xsd:import. WCF consente ora di specificare che tutte le informazioni WSDL vengono restituite in un singolo documento. Per richiedere un singolo documento WSDL aggiungere "?singleWSDL" all'URI durante la richiesta di metadati dal servizio.

Supporto WebSocket

WebSockets è una tecnologia che fornisce una vera comunicazione bidirezionale sulle porte 80 e 443 con caratteristiche di prestazioni simili a TCP. Sono state aggiunte due nuove associazioni per supportare la comunicazione tramite un trasporto WebSocket. NetHttpBinding e NetHttpsBinding. Per ulteriori informazioni, vedere: System-Provided Bindings.

Nuovi valori predefiniti per il trasporto

Nella tabella seguente vengono descritte le impostazioni modificate e la posizione in cui trovare informazioni aggiuntive.

Proprietà Attivato Nuovo valore predefinito Per altre informazioni, vedere
timeoutDiInizializzazioneDelCanale NetTcpBinding 30 secondi ChannelInitializationTimeout
listenBacklog (accodamento di ascolto) NetTcpBinding 12 * numero di processori ListenBacklog
maxPendingAccepts ConnectionOrientedTransportBindingElement

SMSvcHost.exe
2 * numero di processori per il trasporto

4 * numero di processori per SMSvcHost.exe
MaxPendingAccepts Configurazione del servizio di condivisione delle porte Net.TCP
maxPendingConnections ConnectionOrientedTransportBindingElement 12 * numero di processori MaxPendingConnections
receiveTimeout SMSvcHost.exe 30 secondi Configurazione del servizio di condivisione delle porte Net.TCP

Configurazione dei servizi WCF nel codice

Windows Communication Foundation (WCF) consente agli sviluppatori di configurare i servizi usando file di configurazione o codice. I file di configurazione sono utili quando è necessario configurare un servizio dopo la relativa distribuzione. Quando si utilizzano i file di configurazione, un professionista IT deve solo aggiornare il file di configurazione. Non è necessario eseguire la ricompilazione. I file di configurazione, tuttavia, possono risultare complessi e difficili da gestire. Non è disponibile alcun supporto per il debug dei file di configurazione e, poiché il riferimento agli elementi di configurazione viene fatto in base ai nomi, la scrittura dei file di configurazione può risultare difficile e soggetta a errori. WCF consente inoltre di configurare i servizi nel codice. Nelle versioni precedenti di WCF (4.0 e versioni precedenti), la configurazione dei servizi nel codice era semplice negli scenari indipendenti. La classe ServiceHost consentiva di configurare endpoint e comportamenti prima di chiamare ServiceHost.Open. Negli scenari ospitati sul Web, tuttavia, non si ha accesso alla ServiceHost classe . Per configurare un servizio ospitato dal Web era necessario creare un oggetto System.ServiceModel.ServiceHostFactory che creava l'oggetto ServiceHostFactory ed effettuava qualsiasi configurazione richiesta. A partire da .NET Framework 4.5, WCF fornisce un modo più semplice per configurare sia i servizi indipendenti sia quelli ospitati dal Web nel codice. Per altre informazioni, vedere Configurazione dei servizi WCF nel codice.

Caching di ChannelFactory

Le applicazioni client WCF usano la ChannelFactory<TChannel> classe per creare un canale di comunicazione con un servizio WCF. La creazione di ChannelFactory<TChannel> istanze comporta un sovraccarico perché comporta le operazioni seguenti:

  1. Costruzione dell'albero ContractDescription

  2. Includere tutti i tipi CLR richiesti

  3. Costruzione dello stack di canali

  4. Eliminazione delle risorse

Per ridurre al minimo questo sovraccarico, WCF può utilizzare la cache delle factory di canali quando si usa un proxy client WCF. Per altre informazioni, vedere Channel Factory e Memorizzazione nella cache.

Compressione e codificatore binario

A partire da WCF 4.5, il codificatore binario WCF aggiunge il supporto per la compressione. Il tipo di compressione viene configurato con la CompressionFormat proprietà . Sia il client che il servizio devono configurare la CompressionFormat proprietà . La compressione funzionerà per i protocolli HTTP, HTTPS e TCP. Se un client specifica di usare la compressione, ma il servizio non lo supporta, viene generata un'eccezione di protocollo che indica una mancata corrispondenza del protocollo. Per altre informazioni, vedere Scelta di un codificatore di messaggi.

UDP

È stato aggiunto il supporto per un trasporto UDP che consente agli sviluppatori di scrivere servizi che usano la messaggistica "fire and forget". Un client invia un messaggio a un servizio e non prevede alcuna risposta dal servizio.

Supporto per l'autenticazione multipla

Il supporto è stato aggiunto per supportare più modalità di autenticazione, come supportato da IIS, in un singolo endpoint WCF quando si usa il trasporto HTTP e la sicurezza del trasporto. IIS consente di abilitare più modalità di autenticazione in una directory virtuale, questa funzionalità consente a un singolo endpoint WCF di supportare le più modalità di autenticazione abilitate per la directory virtuale in cui è ospitato il servizio WCF.

Supporto IDN

È stato aggiunto il supporto per consentire i servizi WCF con nomi di dominio internazionalizzati. Per altre informazioni, vedere WCF e Nomi di dominio internazionalizzati.

HttpClient

È stata aggiunta una nuova classe chiamata HttpClient per semplificare notevolmente l'uso delle richieste HTTP. Per altre info, vedi HttpClient e Linee guida per l'uso di HttpClient.

Configurazione di IntelliSense

I valori degli attributi nei file di configurazione per gli attributi personalizzati definiti nel progetto ora supportano IntelliSense per facilitare l'uso delle configurazioni in modo rapido e accurato.

Suggerimenti di configurazione

Gli elementi e gli attributi WCF dispongono ora di descrizioni comando nell'editor XML per identificare in modo più semplice e accurato lo scopo dell'elemento o dell'attributo.

Incolla dati come classi

In un progetto WCF i tipi di dati definiti in XML (ad esempio vengono esposti in un servizio) possono essere incollati direttamente in una tabella codici. Il tipo XML verrà incollato come tipo CLR. Per altri dettagli, vedere Generazione di classi di tipi di dati da XML .

WebServiceHost ed endpoint predefiniti

In Visual Studio 2010 WebServiceHost ha creato automaticamente un endpoint predefinito indipendentemente dal fatto che sia stato specificato in modo esplicito un endpoint. In Visual Studio 2012 e versioni successive WebServiceHost crea un endpoint predefinito solo se non vengono aggiunti endpoint in modo esplicito. Se il tuo client si aspetta l'endpoint predefinito, puoi aggiungere esplicitamente un endpoint e indirizzare il client verso di esso. In alternativa, è possibile indicare a WCF di ripristinare il comportamento precedente aggiungendo l'impostazione seguente al file di configurazione dell'applicazione

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

IHttpCookieContainerManager

Questa interfaccia, esposta da IChannelFactory<TChannel>, rende molto più semplice l'uso dei cookie sul lato client. Quando AllowCookies è impostato su true nell'associazione, è possibile accedere ai cookie usando il codice seguente:

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

È quindi possibile recuperare o impostare i cookie da CookieContainer. Quando AllowCookies è impostato su false, è possibile recuperare manualmente i cookie usando OperationContext e inviarli in altre richieste usando OperationContext o un altro controllo messaggi. L'interfaccia IHttpCookieContainerManager consente di autenticare un utente con un servizio e di usare il cookie di autenticazione restituito da tale servizio per l'autenticazione con altri servizi.