Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Perché è consigliabile usare gRPC per sviluppatori WCF
- Confronto tra WCF e gRPC
- Introduzione a gRPC per sviluppatori WCF
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:
Costruzione dell'albero ContractDescription
Includere tutti i tipi CLR richiesti
Costruzione dello stack di canali
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.