Che usato per essere il modo comunemente accettato di rilasciare deleghe client WCF nei "primi" giorni di WCF.
Tuttavia le cose sono cambiate. Si è scoperto che l'implementazione di IClientChannel<T>.Dispose() invoca semplicemente il metodo IClientChannel<T>.Close(), che in alcune circostanze, può generare un'eccezione, ad esempio quando il canale sottostante non è aperto o non può essere chiuso in modo tempestivo.
Pertanto non è una buona idea invocare Close()
all'interno di un blocco catch
poiché ciò potrebbe lasciare alcune risorse non pubblicate in caso di un'eccezione.
La nuovo modo consigliato è invocare IClientChannel<T>.Abort() all'interno del blocco catch
invece, in caso Close()
fallirebbe. Ecco un esempio:
try
{
channel.DoSomething();
channel.Close();
}
catch
{
channel.Abort();
throw;
}
Aggiornamento:
Ecco un riferimento a un articolo di MSDN che describes this recommendation.
fonte
2012-01-30 12:37:26
Questa risposta è un po 'spenta: fornisce un modello di utilizzo per ChannelFactory, mentre la domanda originale riguarda il canale. Mentre è vero (credo) che la chiusura della fabbrica chiuderà tutti i canali che ha creato, uno schema più comune è quello di mantenere una channelFactory aperta in modo che possa creare più canali in modo efficiente. Ogni canale dovrebbe essere chiuso individualmente mantenendo la fabbrica aperta per il lavoro. –
Questo è vero, grazie per averlo indicato. Ho post modificato per riflettere –
@ ÖrjanJämte grazie aggiornato –