2009-06-17 16 views
5

Suponiendo que empezar con la versión sincrónica:Cuando para disponer objeto WCF con el patrón asincrónico

using(var svc = new ServiceObject()) { 
    var result = svc.DoSomething(); 
    // do stuff with result 
} 

termino con

var svc = new ServiceObject(); 
svc.BeginDoSomething(async => { 
    var result = svc.EndDoSomething(async); 
    svc.Dispose(); 
    // do stuff with result 
},null); 

1) ¿Es este el lugar correcto para llamar a Dispose() ?

2) ¿Hay alguna manera de usar usando()?

Respuesta

5

Desde el blog de Rotem Bloom: http://caught-in-a-web.blogspot.com/2008/05/best-practices-how-to-dispose-wcf.html

Mejores prácticas: Cómo desechar clientes WCF

El uso de la instrucción using (Uso en Visual Basic) no se recomienda para los clientes Desechar WCF. Esto se debe a que el final de la instrucción de uso puede causar excepciones que pueden enmascarar otras excepciones que tal vez necesite conocer.


using (CalculatorClient client = new CalculatorClient()) 
{ 
... 
} // this line might throw 

Console.WriteLine("Hope this code wasn't important, because it might not happen."); 

The correct way to do it is: 
try 
{ 
    client.Close(); 
} 
catch (CommunicationException) 
{ 
    client.Abort(); 
} 
catch (TimeoutException) 
{ 
    client.Abort(); 
} 
catch 
{ 
    client.Abort(); 
    throw; 
} 
+0

@Johann Blais, gracias por revisar la respuesta. –

0

Dado que su servicio no tendrá acceso a ningún recurso no administrado, ¿por qué no dejarlo fuera del alcance y dejar que el GC haga su trabajo?

Cuestiones relacionadas