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在数学建模中的简单应用
    ()Python3 列表,数组,矩阵的相互转换
    差商代微商的方法求解一阶常微分方程
    ()LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)
    渐进记法(O,Ω,Θ)
    定义类型别名(typedef,using)
    安装Java和Tomcat
    用PHP语言刷OJ题
    函数模板
    数组操作符
  • 原文地址:https://www.cnblogs.com/WinHEC/p/WCF_Client_Dispose_Practice.html
Copyright © 2011-2022 走看看