关闭WCF链接正确方法详解

WCF是一款由微软开发的有关通信的一个开发框架。它可以为我们创造一个可靠的,跨平台的方式。通常情况下我们关闭WCF链接都是简单地写把ICommunicationObject.Close()方法。#t#

但是这个方法有个问题就是当调用发生异常时,Close()会发生次生的异常,导致链接不能正常关闭。如果当这种异常很多时,必然对系统的稳定性有很大的影响,所以我们必须要考虑异常发生后如何关闭链接的问题。

我们可以写一个扩展来专门关闭WCF链接,而不是使用原来的Close

  1. public static void CloseConnection
    (this ICommunicationObject myServiceClient)  
  2. {  
  3. if (myServiceClient.State !=
     CommunicationState.Opened)  
  4. {  
  5. return;  
  6. }  
  7. try  
  8. {  
  9. myServiceClient.Close();  
  10. }  
  11. catch (CommunicationException ex)  
  12. {  
  13. Debug.Print(ex.ToString());  
  14. myServiceClient.Abort();  
  15. }  
  16. catch (TimeoutException ex)  
  17. {  
  18. Debug.Print(ex.ToString());  
  19. myServiceClient.Abort();  
  20. }  
  21. catch (Exception ex)  
  22. {  
  23. Debug.Print(ex.ToString());  
  24. myServiceClient.Abort();  
  25. throw;  
  26. }  

然后可以使用这个扩展来实现关闭WCF链接:

 

 
 
 
  1. protected void Close(T client)  
  2. {  
  3. if (client != null)  
  4. {  
  5. IChannel iChannel = client 
    as IChannel;  
  6. if (iChannel != null)  
  7. iChannel.CloseConnection();  
  8. else  
  9. {  
  10. IDisposable iDisposable =
     
    client as IDisposable;  
  11. if (iDisposable != null) 
    iDisposable.Dispose();  
  12. }  
  13. }  

 

THE END