Revision: 31234
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 1, 2010 18:20 by domc
Initial Code
/// <summary>
/// When calling a WCF service it is not possible to use a using(...) statement to close
/// the connection after the service call. A call to Dispose may cause an exception
/// which is against MS recommendation. As such when calling a WCF Service you can
/// us the Using method to correctly close the connection after your request or requests.
///
/// <remarks>This can be used with the following code <br/>
/// <code>
/// IMyService service = new MyService(); // Gets a proxy to WCF service
/// service.Using(()=>
/// {
/// service.DoSomthing();
/// service.DoSomethingElse("Hello World");
/// Console.WriteLine();
/// });
/// </code>
/// </remarks>
/// </summary>
/// <param name="service">The IService instance you wish will close after invocation</param>
/// <param name="action">The Action delegate to execute before the service is closed.</param>
public static void Using(this IService service, Action action)
{
ICommunicationObject communicationObject = service as ICommunicationObject;
try
{
action();
service.SafeDispose();
}
catch (CommunicationException cex)
{
Log.Error(String.Format("CommunicationException occured calling service method on {0}", service.GetType().Name), cex);
if (communicationObject != null)
communicationObject.Abort();
throw;
}
catch (TimeoutException tex)
{
Log.Error(String.Format("TimeoutException occured calling service method on {0}", service.GetType().Name), tex);
if (communicationObject != null)
communicationObject.Abort();
throw;
}
}
Initial URL
Initial Description
Initial Title
WCF Using Extension Method
Initial Tags
Initial Language
C#