WCF客户端已关闭事件未被触发

时间:2016-01-21 14:19:57

标签: c# wcf publish-subscribe duplex

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

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

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

客户未能通过订阅以下任一方式接收此事件的通知:

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

两个事件处理程序都没有执行。

但是,如果我在服务器端将回调更改为Abort而不是Close,则客户端会收到Faulted处理程序的通知,然后是{{1处理程序。因此,流产按预期进行。

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

根据MSDN documentation优雅地关闭使用Closed的回调连接,我会选择更突然的Close

1 个答案:

答案 0 :(得分:0)

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

你需要这样做:

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

简化了。你真的应该做try / catch Close / Abort模式。如果关闭不起作用,请在其上调用abort。