WCF是一款由微软开发的有关通信的一个开发框架。它可以为我们创造一个可靠的,跨平台的方式。通常情况下我们关闭WCF链接都是简单地写把ICommunicationObject.Close()方法。#t#
但是这个方法有个问题就是当调用发生异常时,Close()会发生次生的异常,导致链接不能正常关闭。如果当这种异常很多时,必然对系统的稳定性有很大的影响,所以我们必须要考虑异常发生后如何关闭链接的问题。
我们可以写一个扩展来专门关闭WCF链接,而不是使用原来的Close
- public static void CloseConnection
(this ICommunicationObject myServiceClient) - {
- if (myServiceClient.State !=
CommunicationState.Opened) - {
- return;
- }
- try
- {
- myServiceClient.Close();
- }
- catch (CommunicationException ex)
- {
- Debug.Print(ex.ToString());
- myServiceClient.Abort();
- }
- catch (TimeoutException ex)
- {
- Debug.Print(ex.ToString());
- myServiceClient.Abort();
- }
- catch (Exception ex)
- {
- Debug.Print(ex.ToString());
- myServiceClient.Abort();
- throw;
- }
- }
然后可以使用这个扩展来实现关闭WCF链接:
- protected void Close(T client)
- {
- if (client != null)
- {
- IChannel iChannel = client
as IChannel;- if (iChannel != null)
- iChannel.CloseConnection();
- else
- {
- IDisposable iDisposable =
client as IDisposable;- if (iDisposable != null)
iDisposable.Dispose();- }
- }
- }