繁体   English   中英

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

[英]How to detect client's timeout exception on the server side?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM