我想知道在WCF服务中处理超时的正确方法是什么。
我有一个使用会话的服务。客户端执行连接,各种调用(当用户与客户端应用程序交互时),然后在某个时刻执行断开连接。 Disconnect操作在服务器上执行清理(例如释放COM对象)。但是,客户端可以(异常)终止(出于各种原因)而不调用Disconnect。 receiveTimeout
到期后,服务将中止。我需要以允许我正确清理会话的方式处理这个问题。我怎么能这样做?
我能处理一个事件吗?我可以用它实现和自定义服务的接口?我看了,但没找到什么。 IErrorHandler
对超时没有帮助。
我想到了每次调用服务时重置的服务上的计时器。当计时器过去时,客户端被视为断开连接,服务可以清理会话。这个合适吗? (此间隔应始终小于绑定的receiveTimeout
。)
答案 0 :(得分:1)
根据http://msdn.microsoft.com/en-us/library/ff183865.aspx,默认情况下,WCF会话在10分钟后或者receiveTimeout指定的任何内容超时。如果您的服务类实现了IDisposable,我相信Dispose()调用此时应该进入,这将为您提供第二次/最后一次机会来清理任何未完成的资源。