2009-06-17 3 views
5

Et si je commencer avec la version synchrone:Quand disposer objet WCF avec motif async

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

je le vent avec

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

1) Est-ce le bon endroit pour appeler Dispose() ?

2) est-il possible d'utiliser using()?

Répondre

5

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

Meilleures pratiques: comment se débarrasser des clients WCF

Utilisation de l'instruction à l'aide (à l'aide de Visual Basic) n'est pas recommandé pour les clients Éliminez WCF. En effet, la fin de l'instruction using peut provoquer des exceptions qui peuvent masquer d'autres exceptions dont vous pourriez avoir besoin.


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, merci de passer en revue la réponse. –

0

Puisque votre service n'accède à aucune ressource non gérée, pourquoi ne pas le laisser hors de portée et laisser le GC faire son travail?

Questions connexes