我有一个会话WCF服务,它会生成一个进程,并在调用IsInitiating操作时打开一个命名管道。当调用IsTerminating操作时,服务向管道发送一条消息,通知另一端的进程它可以关闭。不幸的是,如果客户端没有正常断开连接(通过调用IsTerminating操作),则消息永远不会发送到管道,而其他进程永远不会退出。
我尝试使我的服务实现IDisposable(希望当会话在服务器上超时时它将调用我的Dispose方法),但这似乎不起作用。
当客户端断开连接时,有什么办法可以在服务器端调用一些代码(即使我必须等待一个不活动时间)?
答案 0 :(得分:0)
IDisposable的想法应该有效。设置实例上下文模式,如:
来自MSDN:http://msdn.microsoft.com/en-us/magazine/cc163590.aspx
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] class MyService:IMyContract {...}
会话通常在客户端关闭代理时终止,代理通知服务会话已结束。如果服务支持IDisposable,则将调用Dispose方法。图4显示了配置为使用私有会话及其客户端的合同和服务。正如您从输出中看到的那样,客户端获得了一个专用实例。