public static class WcfExtensions { public static void Using<T>(this T client, Action<T> work) where T : ICommunicationObject { try { work(client); client.Close(); } catch (CommunicationException e) { client.Abort(); } catch (TimeoutException e) { client.Abort(); } catch (Exception e) { client.Abort(); throw; } } }
Then use this instead of the using keyword:
new SomeClient().Using(channel => {
channel.Login(username, password);
});
Or if you are using ChannelFactory
then:
new ChannelFactory<ISomeService>().Using(channel => {
channel.Login(username, password);
});