无法为20多个连接提供服务MVC3 IIS6 w长轮询

时间:2012-04-26 09:45:15

标签: asp.net-mvc-3 iis-6 long-polling

这似乎是一个常见的问题/问题,但是尽管查看了一些提议的解决方案,但到目前为止我们还没有任何作用。

该应用

这是一个简单的聊天应用程序,它在现有应用程序的JSON库上添加了一个新界面。我们代理对其应用程序的所有调用以避免x域限制(IE8)。 ASP.net MVC3 App;

它托管在IIS6,W2K3 SP2中。 DEV svr有1gig ram,TEST svr有4gig ram。

问题

当我们接近20个并发用户时,请求开始滞后 - 在事件查看器中找不到任何问题。看起来呼叫刚刚排队。没有503返回。

我们尝试了什么

  • 我们正在使用AsyncController对第三方Web服务进行长时间轮询以获得结果 在IIS6中托管
  • 我们正在使用TPL在我们的AsyncController方法中调用他们的服务
  • 我们修改了processModel并设置了maxWorkerThreads = 100。
  • 我们查看了this how-to,但HTTP.SYS配置看起来服务于无数个线程,所以我们没有费心添加reg键。
  • 第三方服务可以处理大量并发请求(并且位于Web场中,因此我们相信我们是最薄弱的环节)

我们缺少什么? - 非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

嗯......差不多四周后,我想我会更新这个,以防有人想知道是什么帮助我们克服了这些限制(我们在DEV服务器上塞满了大约100个simul连接, 1gig Xeon)。

AsyncControllers

  • 如果您有长时间等待请求(即长轮询),请使用它们。
  • 随意使用 TaskFactory 但请务必将其标记为长时间运行的进程,如果您的线程中存在异常风险,请确保使用ContinueWith以便减少操作,并将错误返回给您的来电者。

ServicePointManager

  • 如果您正在进行下游呼叫(即WebService /第三方API),请确保从默认的2个并发连接中增加了DefaultConnectionLimit。
  • 粗略的指南是8 * Num核心,因此您不会使传出的连接资源匮乏。
  • 有关详细信息,请参阅this MSDN article on DefaultConnectionLimit

IOCP vs RestSharp

最后,我们的问题不是传入请求,而是请求被代理到第三方,我们没有提供足够的连接,因此他们排队等待整个系统。很高兴在经过大量的阅读,调查和编码后说我们已经解决了。