我有一个.NET 3.5 BasicHttpBinding,没有在IIS 6.0上托管的安全WCF服务。
根据MS推荐,我的服务限制增加了。
我的服务操作被并发地调用几百次,并且在某些时候客户端获得超时异常(59:00,这是服务器和客户端超时中设置的内容)。
如果我提高超时,它就会达到新的限制。
似乎应用程序只是在某处“冻结”,我们无法弄清楚这是如何发生的。
服务器端的WCF跟踪没有提供任何东西。
关于可能出现什么问题的任何想法?
由于
答案 0 :(得分:0)
我假设你的WebService没有使用新的async / await特别是数据库调用。在那种情况下,因为你阻止了有限的线程。
更详细。 IIS / ASP.net仅创建有限数量的线程来处理请求。第一个...说8个请求启动线程并开始工作。在某些时候,他们将访问数据库(我假设一个传统的n层应用程序)。那些线程睡觉了。下一个说...... 992个请求命中了IIS,并被排在队列中。
在某些时候,数据库调用return,process stuff ...将数据发送到客户端。另外8个请求已经出列...打到数据库......等等......
但是,每组8个请求都需要一段有限的时间才能完成。在它们之前有超过900个请求,最后100个左右的线程将在它们启动之前至少100 *延迟*的往返次数。如果你的延迟*往返次数很高......你的最后一个请求在它出现之前需要很长时间,因此超时。
存在两种补救措施。第一个,创建更多线程....将耗尽所有内存和IIS崩溃。第二种是使用.net 4.5和async / await。