突然WCF上的资源清理会话服务断开连接

时间:2009-06-10 13:47:43

标签: wcf web-services

我有一个会话WCF服务,它会生成一个进程,并在调用IsInitiating操作时打开一个命名管道。当调用IsTerminating操作时,服务向管道发送一条消息,通知另一端的进程它可以关闭。不幸的是,如果客户端没有正常断开连接(通过调用IsTerminating操作),则消息永远不会发送到管道,而其他进程永远不会退出。

我尝试使我的服务实现IDisposable(希望当会话在服务器上超时时它将调用我的Dispose方法),但这似乎不起作用。

当客户端断开连接时,有什么办法可以在服务器端调用一些代码(即使我必须等待一个不活动时间)?

1 个答案:

答案 0 :(得分:0)

IDisposable的想法应该有效。设置实例上下文模式,如:

来自MSDN:http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] class MyService:IMyContract {...}

会话通常在客户端关闭代理时终止,代理通知服务会话已结束。如果服务支持IDisposable,则将调用Dispose方法。图4显示了配置为使用私有会话及其客户端的合同和服务。正如您从输出中看到的那样,客户端获得了一个专用实例。