2009-11-03 46 views
1

我们有IIS6对ASP.NET Web服务上运行的SOAP Web服务表现出奇怪的行为,当它处理导致长服务器时间的请求在ASP.NET Web服务结果的SOAP请求处理。本质上,如果一个请求在服务器上处理需要超过5分钟的时间,那么IIS永远不会将响应发送回客户端,尽管从ASP.NET的角度来看,调用已完成。我们知道这一点,因为我们在Web方法调用的开始和结束处将条目写入应用程序日志,并且写入这些日志条目。但是,实际上并未发出响应,并且连接似乎无限期地保持打开状态。在一次测试中,我们看到连接在超过24小时内保持打开状态,然后我们手动停止测试客户端。长期运行中没有响应

我们有一个测试SOAP客户端,能够检测的响应开始流了下来,将其从服务器,并在服务器处理时间花费太长的情况下的那一刻,没有什么是以往任何时候都流了下来。即使使用大量的响应负载,我们也应该在Web方法的“结束”应用程序日志条目写入后不久看到响应慢慢消失,但我们从未看到它。

确切的服务器处理时间,事情的行为在这个庄园是很难确定。我们有一个长时间运行的测试调用,导致大约2.5分钟的服务器处理时间,并且该调用导致对客户端的成功响应。我们有另一个需要大约8分钟的时间,如上所述那个失败。所以阈值必须介于两者之间。

回答

1

我建议你调用Web方法来启动你需要的任务的执行,比使用其他方法来轮询任务的完成服务器。两年前我遇到了同样的问题,我以这种方式解决了这个问题。客户端在服务器上排队一个任务,然后在指定的时间间隔后向服务器询问任务的结果。

我希望有帮助。

+0

这不是一个坏主意。我们实际上正在考虑对未来将添加的其他Web方法使用这种更“异步”的方法,我们知道这种方法将长期运行。这种特定方法的问题是大多数输入导致相对短的呼叫;只有少数边缘案例会导致它像这样长时间运行。如果强迫我们的客户仅为这些情况使用轮询,这将会增加复杂性。 很高兴知道是什么导致服务器不再响应。它几乎看起来像IIS或ASP.NET Web服务中的错误。 – twistedstream 2009-11-03 13:10:13