Cuando se usa una única instancia ClientBase<T>
para múltiples llamadas al servicio WCF, puede poner un canal en un estado en falla (es decir, cuando el servicio está inactivo).Cómo curar canales WCF con fallas?
Me gustaría curar el canal automáticamente cuando vuelva a aparecer el servicio. La única manera que he encontrado es llamar al siguiente código antes de cada llamada al método:
if (clientBase.InnerChannel.State == CommunicationState.Faulted)
{
clientBase.Abort();
((IDisposable)clientBase).Dispose();
clientBase = new SampleServiceClientBase();
}
me dio la sensación de que esta no es la forma correcta de hacerlo. Alguien tiene una mejor idea?
¿Necesita T también para implementar IDisposable? –
@DavidGardiner: No si implementa 'ICommunicationObject'. La implementación 'Dispose' en los canales WCF es en realidad parte del problema. – Aaronaught
Pero la interfaz ICommunicationObject (http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx) no implementa IDisposable, por lo que el ejemplo anterior no funcionará sin el lanzamiento de co a IDisposable. –