WCF服务挂起,客户端收到ServiceModel.CommunicationException

时间:2009-08-06 20:50:30

标签: wcf

我的应用程序有50个服务端点(例如/mysite/myService.svc)。它托管在IIS中。间歇性地(每两到三天一次)服务停止响应。它永远不会挂起相同的服务。虽然服务挂起,但其他一些服务工作正常,还有一些服务也挂起。

所有客户端(来自不同计算机)都会收到此错误:

ServiceModel.CommunicationException 

Message: An error occurred while receiving the HTTP response to 
https://server/mysite/myservice1.svc.

This could be due to the service endpoint binding not using the HTTP 
protocol. This could also be due to an HTTP request context being
aborted by the server (possibly due to the service shutting down). 
See server logs for more details.

当客户端尝试调用挂起的服务时,服务器不会引发异常。我所拥有的只是客户端的错误。

我必须手动回收应用程序池以解决问题。

你知道原因是什么吗?我该如何调查此问题?当服务挂起时,我愿意对工作进程进行内存转储,但我不知道在转储中要搜索什么。

更新(2009年8月13日):我几乎排除了服务器用完连接的想法(请参阅Shiraz Bhaiji的回答中的评论)。我可能有一个新的领导:我在日志文件中记录所有服务器端异常。所以从理论上讲,当客户端发生这种情况时,服务器上不会出现异常;否则我会在我的日志中有证据。但是如果在服务器上发生错误但是在异常未路由到我的异常处理代码的低级别会发生什么呢?我已发布this question关于无法处理低级异常的情况。我会告诉你我调查的进展情况。

3 个答案:

答案 0 :(得分:1)

听起来你的联系已经不多了。

默认情况下,WCF有超时,因此保持连接打开10分钟。

当您回收应用程序池时,所有连接都将关闭,因此可以重新运行。

要修复它,请检查您的代码以确保关闭连接/处理代理。

答案 1 :(得分:1)

要解决此问题,我们在绑定时将establishSecurityContext设置为False。

答案 2 :(得分:0)

我没有遇到过这个特定问题,但建议在服务和/或客户端应用程序的配置中打开WCF服务的跟踪/消息日志记录(如果您可以控制它)。我在过去几天内完成了这项服务,我需要对其进行故障排除。

MSDN链接here是一个很好的起点。

另请参阅this帖子中的表格,了解您可以配置的不同级别的跟踪详细信息。有几个级别可以从仅例外记录到完整的消息详细信息。在app.config文件中设置它很快。

要解析日志文件输出,请使用Windows SDK附带的SvcTraceViewer.exe,如果安装了该SDK,则应位于此文件夹中:C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0 \ Bin