asp.net-mvc-3 - 无法通过长轮询为 20 多个连接 MVC3 IIS6 提供服务

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

这似乎是一个常见的问题,但尽管检查了许多建议的解决方案,但到目前为止对我们来说没有任何效果。

应用程序

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

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

问题

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

我们的尝试

  • 我们使用 AsyncController 对第 3 方网络服务进行长轮询以获取结果 托管在 IIS6 中
  • 我们使用 TPL 在 AsyncController 方法中调用他们的服务
  • 我们已修改 processModel并设置 maxWorkerThreads=100。
  • 我们查看了 this how-to但 HTTP.SYS 配置看起来可以服务无限数量的线程,因此我们不必费心添加注册表项。
  • 第 3 方服务可以处理大量并发请求(并且位于网络场中,因此我们相当有信心我们是最薄弱的环节)

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

最佳答案

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

异步 Controller

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

服务点管理器

  • 如果您要进行下游调用(即 WebService/第 3 方 API),请确保您已将 DefaultConnectionLimit 从默认的 2 个同时连接增加。
  • 粗略的指导是 8 * Num 核心,这样您就不会耗尽传出连接资源。
  • 参见this MSDN article on DefaultConnectionLimit了解更多信息。

IOCP 与 RestSharp

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

关于asp.net-mvc-3 - 无法通过长轮询为 20 多个连接 MVC3 IIS6 提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330952/

相关文章:

asp.net-mvc-3 - 如何将多项目解决方案部署到生产服务器

IIS日志分析器

php - 实时聊天: What are my options?

c# - 允许 IIS 运行 cmd 命令

php - 轮询 Azure 队列返回损坏的管道

java - Cometd 服务器广播 channel 自动删除

jquery - 仅当字段可见时才需要验证

asp.net-mvc-3 - 将图像添加到 MVC 3 Web 网格列标题

c# - 如何在 ASP.NET MVC 3 中将 Razor View 呈现为字符串?

asp.net-mvc-3 - 在 MVC 中的应用程序级别持久保存数据库存储的查找数据的最佳实践