Taken from
http://web.archive.org/web/20100703123454/http://old.iserviceoriented.com/blog/post/Indisposable+-+WCF+Gotcha+1.aspx
OrderServiceClient proxy = null;
bool success = false;
try
{
proxy = new OrderServiceClient();
proxy.PlaceOrder(request);
proxy.Close();
success = true;
}
finally
{
if(!success)
{
proxy.Abort();
}
}
If you do not want to clutter your code with the above code all the places, use the following approach-
Service<IOrderService>.Use(orderService=>
{
orderService.PlaceOrder(request);
}
=====================Implementation of Service class========
public delegate void UseServiceDelegate<T>(T proxy);
public static class Service<T>
{
public static ChannelFactory<T> _channelFactory = new ChannelFactory<T>("");
public static void Use(UseServiceDelegate<T> codeBlock)
{
IClientChannel proxy = (IClientChannel)_channelFactory.CreateChannel();
bool success = false;
try
{
codeBlock((T)proxy);
proxy.Close();
success = true;
}
finally
{
if (!success)
{
proxy.Abort();
}
}
}
}
No comments:
Post a Comment