如果客户端已断开连接,则中止WCF服务器任务

时间:2012-01-20 13:34:22

标签: .net wcf windows-services wcf-client thread-abort

我们在Windows服务下托管了WCF服务。此服务的客户端已将closeTimeout,receiveTimeout,openTimeout,sentTimeout设置为5分钟。服务也一样。在某些情况下,WCF服务可能需要5分钟以上才能处理任务。在这种情况下,客户端会中止调用,但服务进程会一直运行,直到完成其工作。

现在,问题是......是否有任何配置/技术可以检测到客户端已断开连接或超时(或其他什么?)以便WCF服务可以中止其任务?

1 个答案:

答案 0 :(得分:1)

It's not easy,如果不是impossible(所以这几乎是一个重复的问题)。

您真的希望在客户端断开连接时取消操作吗?否则,您可以使用某种工作队列来实现某种类似状态的机制。

然后,客户端调用QueueQuery(query),它只执行该操作,并向刚刚排队的查询返回一个标识符。之后,客户端可以继续轮询QueryStatus(id)以检索状态(例如“已排队”,“正在运行”,“已完成”),并且当查询完成后,它可以调用QueryResults(id)

同时,另一项服务(即Windows服务,而不是WCF服务)继续执行所有排队查询。