2010-09-21 7 views
1

Question rapide, mais est-ce la meilleure pratique pour envelopper une classe de proxy de service dans une instruction using? En VS, nous avons généré un proxy pour un service WCF. Pour la classe de service, devrait-il être enveloppé dans l'utilisation? Je ne crois pas qu'il implémente IDisposable et il n'y a pas de méthode Dispose(). Merci.Enveloppant une classe de proxy de service .NET WCF dans un bloc USING {}?

Répondre

4

Bien que proxies générés par le service de référence et svcutil.exe font mettre en œuvre IDisposable, en général, il est pas une meilleure pratique pour les envelopper dans un bloc using; préférer plutôt ouvrir et fermer explicitement.

Pourquoi? Eh bien, le problème est que la méthode Dispose appelle Close, qui peut lancer dans diverses circonstances, le plus en évidence si le canal est dans un état Faulted. En général, cela est mauvais, mais si cela se produit au cours d'un bloc finally, car vous laissez une exception d'erreur monter en flèche, l'exception Close peut être annulée, perdant ainsi l'exception d'origine.

+0

Habituellement, je n'ouvre et ne ferme pas explicitement. Habituellement, j'initialise le service et invoque des méthodes dessus - ne fermant jamais à la fin. Je le vois beaucoup aussi. Mauvaise pratique? –

+0

@Ryan Peters: si vous utilisez un bloc 'using', ce ne serait pas une mauvaise pratique, à part le problème que j'ai mentionné. Mais vous devez toujours fermer votre canal lorsque vous ne l'utilisez pas, explicitement ou implicitement. Explicitement * l'ouverture * du canal, d'autre part, n'est pas toujours nécessaire, car le premier appel d'opération sur le proxy ouvrira toujours le canal. – Randolpho

Questions connexes