Applicazioni client di livello intermedio
In questo argomento vengono analizzati alcuni aspetti specifici delle applicazioni client di livello intermedio che utilizzano Windows Communication Foundation (WCF).
Miglioramento delle prestazioni dei client di livello intermedio
Paragonata alle tecnologie di comunicazione precedenti, ad esempio i servizi Web che utilizzano ASP.NET, la creazione di un'istanza client WCF può essere più complessa a causa del vasto insieme di funzionalità di WCF. Ad esempio, quando un oggetto ChannelFactory viene aperto può stabilire una sessione protetta con il servizio, una procedura che aumenta il tempo di avvio per l'istanza client. In genere queste funzionalità aggiuntive non influiscono significativamente sulle applicazioni client in quanto il client WCF effettua più chiamate e quindi viene chiuso.
Le applicazioni client di livello intermedio possono tuttavia creare rapidamente molti oggetti client WCF e devono quindi soddisfare maggiori requisiti di inizializzazione. Per migliorare le prestazioni delle applicazioni di livello intermedio durante le chiamate ai servizi è possibile seguire principalmente due diversi approcci:
- Memorizzare nella cache l'oggetto client WCF e riutilizzarlo, se possibile, per chiamate successive.
- Creare un oggetto ChannelFactory e utilizzarlo per creare nuovi oggetti di canale client WCF per ogni chiamata.
Quando si seguono queste procedure è opportuno considerare gli aspetti seguenti:
- Se il servizio gestisce uno stato specifico del client utilizzando una sessione, non è possibile riutilizzare il client WCF di livello intermedio con richieste di client di vari livelli poiché lo stato del servizio è associato allo stato del client di livello intermedio.
- Se il servizio deve eseguire l'autenticazione per ogni singolo client, è necessario creare un nuovo client per ogni richiesta in ingresso nel livello intermedio anziché riutilizzare il client WCF di livello intermedio (o l'oggetto di canale client WCF ) perché le credenziali client del livello intermedio non possono essere modificate dopo che il client (o ChannelFactory) WCF è stato creato.
- Sebbene i canali e i client creati dai canali siano thread-safe, è possibile che non supportino la scrittura di più messaggi in rete contemporaneamente. Se vengono inviati messaggi di grandi dimensioni, in particolare se viene eseguito il flusso, l'operazione di invio potrebbe bloccarsi in attesa del completamento di un'altra operazione di invio. Ciò causa due tipi di problemi: la mancanza di concorrenza e la possibilità di deadlock se il flusso di controllo torna al servizio riutilizzando il canale (ovvero, il client condiviso chiama un servizio il cui percorso di codice comporta un callback al client condiviso). Questa situazione si verifica indipendentemente dal tipo di client WCF che si riutilizza.
- È necessario gestire i canali in stato di errore indipendentemente dal fatto che si condivida o meno il canale. Quando i canali vengono riutilizzati, un canale in stato di errore può tuttavia annullare più richieste o operazioni di invio in sospeso.
Per un esempio in cui vengono illustrate le procedure consigliate per riutilizzare un client per più richieste, vedere Data Binding in an ASP.NET Client.
È anche possibile migliorare le prestazioni di avvio per i client che utilizzano tipi di dati serializzabili utilizzando la classe XmlSerializer per generare e compilare il codice di serializzazione per questi tipi di dati in fase di esecuzione. Questa procedura può comportare una riduzione delle prestazioni di avvio. ServiceModel Metadata Utility Tool (Svcutil.exe) può migliorare le prestazioni all'avvio per queste applicazioni generando il codice di serializzazione necessario dagli assembly compilati per l'applicazione. Per ulteriori informazioni, vedere Procedura: migliorare il tempo di avvio di applicazioni client WCF utilizzando XmlSerializer.