【问题标题】:WCF Client Closed event not firedWCF 客户端关闭事件未触发
【发布时间】:2016-01-21 14:19:56
【问题描述】:

我有一个 WCF 服务器,它使用双工模型维护对客户端回调的引用。

如果我明确关闭服务器上的回调连接:

ICallBack callBack = OperationContext.Current.GetCallbackChannel<ICallBack>();
callBack.Close()

客户端无法通过订阅以下任一方式收到此事件的通知:

client.InnerChannel.Closed += Handler;
client.InnerDuplexChannel.Closed += Handler;

不执行任何事件处理程序。

但是,如果我在服务器端将回调更改为Abort 而不是Close,客户端会收到Faulted 处理程序的通知,然后是Closed 处理程序。所以中止按预期工作。

我检查了回调是否处于有效状态,那么为什么客户端在Abort 上收到Faulted 通知而不是在Close 上收到Closing 通知? Close之后的回调状态为Closed

根据MSDN documentation,使用Close 优雅地关闭回调连接将是我的首选,而不是更突然的Abort

【问题讨论】:

    标签: c# wcf publish-subscribe duplex


    【解决方案1】:

    因为您将其转换为您自己的接口,我假设它实现了 Close(),这不会触发 WCF 事件。

    你需要这样做:

    IClientChannel pClientChannel = (IClientChannel) callback;
    pClientChannel.Close();
    

    这很简单。你真的应该做 try/catch Close/Abort 模式。如果 close 不起作用,请对其调用 abort。

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多