Quick question, but is it best practice to wrap a service proxy class in a using statement? Meaning, in VS, we generated a proxy for a WCF service. For the service class, should it be wrapped in using? I don't believe it implements IDisposable and there is no Dispose() method. Thanks.
Although proxies generated by Service Reference and svcutil.exe do implement IDisposable
, in general it is not a best practice to wrap them in a using
block; instead favor explicit open and closing.
Why? Well, the problem is that the Dispose
method calls Close
, which can throw in various circumstances, most prominently if the channel is in a Faulted state. In general this is bad, but if this happens during a finally block because you let a fault exception bubble up, it could swallow the original fault exception in favor of the Close
exception, effectively losing the original exception.
Here is some reference for you, starting with an SO question:
Avoiding Problems with the Using Statement
The Problems with WCF and the Using Block
Avoiding Problems with the Using Statement and WCF Service Proxies
This is what we recommend people use - http://blogs.msdn.com/b/drnick/archive/2007/05/04/the-try-catch-abort-pattern.aspx