0

我有一个托管在 IIS 6.0 上的 .NET 3.5 BasicHttpBinding 无安全 WCF 服务。

根据 MS 的建议,我提高了服务限制。

我的服务操作同时被调用了数百次,并且在某些时候客户端出现超时异常(59:00,这是服务器和客户端超时设置的内容)。

如果我提高超时时间,它就会达到新的限制。

似乎应用程序只是在某个地方“冻结”,我们无法弄清楚这是如何发生的。

服务器端的 WCF 跟踪没有提供任何东西。

关于可能是什么问题的任何想法?

谢谢

4

1 回答 1

0

我假设您的 WebService 没有使用新的 async/await 尤其是数据库调用。在这种情况下,这是因为您阻塞了有限的线程。

更详细。IIS/ASP.net 只创建有限数量的线程来处理请求。第一个……说 8 个请求启动线程并开始工作。在某些时候,它们会访问数据库(我假设是一个传统的 n 层应用程序)。那些线程睡觉。接下来说...992 个请求命中 IIS 并保留在队列中。

在某些时候,数据库调用返回,处理内容......将数据发送到客户端。另有 8 个请求出列……访问数据库……等等……

然而,每组 8 个请求都需要有限的时间才能完成。由于前面有超过 900 个请求,最后 100 个左右的线程将至少需要 100 * 延迟 * 往返次数才能启动。如果您的延迟*往返次数很高......您的最后一个请求将需要很长时间才能出队,因此超时。

存在两种补救措施。首先,创建更多线程......将用完所有内存并且您的 IIS 崩溃。第二种是使用 .net 4.5 和 async/await。

浏览此处获取更多信息

于 2013-06-25T07:34:38.013 回答