zoukankan      html  css  js  c++  java
  • 关于WCF客户端对象的释放:Close( ) & Abort( )

    其实六七年前WCF盛行的时候也讨论过这个问题。

    Close( ) 使 ClientBase<TChannel> 对象从其当前状态转换到关闭状态。

    Abort( ) 使 ClientBase<TChannel> 对象立即从其当前状态转换到关闭状态。

    文档描述仅仅能看出“立即”两个字的差别,但究竟该怎么用就有点迷茫了。

    通过反编译可以发现,两个方法源自接口 ICommunicationObject,该接口“为系统中所有面向通信的对象(包括通道、通道管理器、工厂、侦听器以及调度程序和服务主机)定义基本状态机的协定。”

    观察源码可知 Abort( ) 方法不会抛出异常, 而 Close( )方法则可能抛出 TimeoutExceptionCommunicationException

    另外,ClientBase<TChannel> 实现了接口 IDisposable接口,这意味着我们可以在代码中使用 using 语句块,这样在出作用域时会自动调用 Dispose( ) 方法来释放资源。不过Dispose( )方法内部也仅仅是调用了 Close( )方法,因此也是存在抛异常的可能。

    究竟该怎么用??

    这里直接给出最佳实践,感兴趣的同学可以反编译查看源码。

     1 try
     2 {
     3     ...
     4     client.Close();
     5 }
     6 catch (CommunicationException e)
     7 {
     8     ...
     9     client.Abort();
    10 }
    11 catch (TimeoutException e)
    12 {
    13     ...
    14     client.Abort();
    15 }
    16 catch (Exception e)
    17 {
    18     ...
    19     client.Abort();
    20     throw;
    21 }

    引用:MSDN

  • 相关阅读:
    求正方形的面积和周长
    面向对象练习——校园管理系统
    python--面向对象(最全讲解)
    git删除远程仓库的文件或目录
    git设置忽略文件和目录
    计算器
    织梦标签整理
    比较恶心的360老年版浏览器 文件导出下载
    织梦文章列表样式多元化实现
    php函数整理
  • 原文地址:https://www.cnblogs.com/WinHEC/p/WCF_Client_Dispose_Practice.html
Copyright © 2011-2022 走看看