2009-04-27 17 views
18

Ho inserito un'istanza del proxy client per il servizio WCF in una proprietà della classe App in modo da poterla ottenere da qualsiasi punto dell'app.Quando chiudere il client WCF?

Non sto chiudendo il client, lo lascio aperto per tutta la durata dell'app. La ragione principale di ciò è che se dovessi seguire il // Comment nella pagina mex del servizio WCF (quella che si ottiene se si punta un browser all'URL del servizio WCF) si dice // Chiude sempre il client. client.Close();

che va bene, tranne se chiamo client.Close() subito dopo faccio una chiamata al metodo client.SomeAsync() quindi viene chiuso prima che i risultati tornino. Dovrei mettere la chiusura nel metodo Completed()? O dovrei semplicemente dimenticarmi di chiuderlo, poiché una volta chiuso devo creare una nuova istanza del proxy client (potrebbe anche non memorizzarlo nell'app.property se è il caso.

grazie, Stephen

risposta

12

si dovrebbe chiuderlo come consigliato. e sì, se si sta utilizzando i metodi asincroni, allora si deve chiudere solo dopo la chiamata viene completata.

Creazione (apertura) e di chiusura i clienti è la norma per WCF Non ci sono penalità prestazionali notevoli per la creazione e la chiusura continua di nuovi clienti

+0

Ricordarsi di aggiungere il comando try on close e anche perché close può causare eccezioni. http://msdn.microsoft.com/en-us/library/ms405496.aspx. Lo uso come questo prova { client.Close(); } cattura { client.Abort(); } –

+0

Nota che chiamare Dispose su ClientBase comporterà anche il richiamo di Close. –

1

E xplicitamente chiudilo preferibilmente in un ultimo {} del tuo metodo Completato. Per qualsiasi motivo, se il client rimane connesso, inizierai a bloccare altre chiamate client. Come per la RFC HTTP:

Definito nel 1999 (RFC 2616) “clienti che utilizzano le connessioni persistenti dovrebbe limitare il numero di connessioni simultanee che mantengono a un determinato server. Un client per singolo utente NON DEVE mantenere più di 2 connessioni con alcun server o proxy. Un proxy DEVE utilizzare fino a 2 * N connessioni a un altro server o proxy , dove N è il numero di utenti attivi contemporaneamente. Questi linee guida hanno lo scopo di migliorare i tempi di risposta HTTP ed evitare la congestione .”Dal momento che gli sviluppatori sono utilizzando AJAX o richieste di AJAX come ad aggiornamento di una pagina Web i limiti http sono discusso sempre di più.

Con un carico se non si stanno chiudendo le connessioni è molto probabile che si avvii il blocco. Naturalmente sto assumendo che questo sia HttpBinding.

Problemi correlati