2009-06-10 33 views
3

我有一个会话的WCF服务,它产生一个进程并在调用IsInitiating操作时打开一个到这个进程的命名管道。当调用IsTerminating操作时,服务沿管道发送消息以通知另一端的进程它可以关闭。不幸的是,如果客户端没有正常断开连接(通过调用IsTerminating操作),那么该消息绝不会发送到管道,而另一个进程永远不会退出。突然WCF的资源清理会话服务断开连接

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

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

+0

我不能得到IDisposable工作要么 - 发现两个人声称它的作品虽然... – Schneider 2010-06-10 14:56:34

回答

0

与IDisposable的想法应该工作。设置您的实例上下文模式,如:

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

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

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

相关问题