【问题标题】:Abort WCF server task if client is disconnected如果客户端断开连接,则中止 WCF 服务器任务
【发布时间】:2012-01-20 13:34:21
【问题描述】:
我们在 Windows 服务下托管了 WCF 服务。该服务的客户端设置了closeTimeout、receiveTimeout、openTimeout、sentTimeout设置为5分钟。服务也一样。在某些情况下,WCF 服务可能需要 5 分钟以上的时间来处理一个任务。在这种情况下,客户端会中止调用,但服务进程会继续运行,直到完成其工作。
现在,问题是...是否有任何可用的配置/技术可以检测到客户端已断开连接或超时(或其他原因?),以便 WCF 服务可以中止其任务?
【问题讨论】:
标签:
.net
wcf
windows-services
wcf-client
thread-abort
【解决方案1】:
It'snoteasy,如果不是impossible(所以这几乎是一个重复的问题)。
您真的希望在客户端断开连接时取消操作吗?否则,您可以使用某种工作队列来实现某种类似状态的机制。
然后,客户端调用QueueQuery(query),它仅执行此操作并将标识符返回给刚刚排队的查询。之后,客户端可以继续轮询QueryStatus(id)以获取状态(例如“Queued”、“Running”、“Finished”),当查询完成时,它可以调用QueryResults(id)。
与此同时,另一个服务(即 Windows 服务,而不是 WCF 服务)继续执行所有排队的查询。