Pergunta

Supondo que eu começar com a versão síncrona:

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

Eu acabar com

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

1) Este é o lugar correto para chamar Dispose ()?

2) se existe uma maneira de usar usando ()?

Foi útil?

Solução

A partir do blog Rotem Bloom: http: // caught-in-a-web.blogspot.com/2008/05/best-practices-how-to-dispose-wcf.html

Best Practices: Como clientes Descarte WCF

O uso da instrução using (Using em Visual Basic) não é recomendado para clientes Descarte WCF. Isso ocorre porque o fim da instrução usando pode causar exceções que podem mascarar outras exceções que você pode precisar de saber sobre.


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;
}

Outras dicas

Uma vez que o serviço não estará acessando os recursos não gerenciados, por que não deixá-lo cair fora do escopo e deixar o GC fazer a sua coisa?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top