如何在服务器端检测客户端的超时异常?

Mac*_*ski 6 c# wcf

我使用的同步WCF服务在99%的情况下运行良好,但在极少数情况下,客户端会在服务器完成处理之前超时.有没有办法在SERVER端检测到客户端已经超时?我可以使用异步操作,但在这种情况下,服务器端超时检测将为我节省大量的工作.我正在使用net.tcp绑定,如果这很重要的话.

Chr*_*n.K 1

对于net.tcp、http等一般没有。(有关一些想法,请参阅上面的评论;对于其他协议/绑定/等,它也可能有所不同。)

原因是,服务器端的 WCF 基础结构代码在完成执行服务操作的实现代码并编组响应之前不会使用通道。只有这样,它才会尝试发送响应,并此时认识到连接已被客户端中止。

当服务器收到该错误时,用户代码(您的服务操作实现)已经完成,因此您无法再对此做出反应。从调度程序或其他扩展点内部可能可以实现,但我个人还没有尝试过。但是,这也无法使您的服务器免于不必要的工作,因为如上所述,只有当服务器实际尝试发送答案时,客户端断开连接才会被识别。

缓解此类问题的一种“简单”方法可能是将正在完成的工作拆分为多个服务操作/调用(如果可能的话;并且不要意外地在过程中引入服务器端状态)。或者正如其他人所说,让客户端实现一个“Ping”接口,服务器可以使用该接口来检查客户端是否仍然“活动”并且仍然需要响应。