4

目前,我们正在开发一个 ASMX、ASP 2.0、IIS 7 Web 服务,它会进行一些计算(并返回一个动态生成的文档),大约需要 10 分钟。运行 60 秒。

由于他有一台具有多核和大量 RAM 的大型机器,我希望 IIS 尽最大努力将到达其请求队列中的请求路由到应用程序池线程池的所有可用线程。

但我们经历的却恰恰相反:

当我们从多个不同的客户端向 ASMX Web 服务 URL 发出请求时,IIS 似乎串行处理这些请求。即请求 1 到达,正在处理,然后请求 2 正在处理,然后请求 3,等等。

问题:

如果有足够的线程可用,是否可以(不更改 Web 服务的 C# 代码)配置 IIS 以并行处理请求?

  • 如果:我该怎么做?
  • 没有:任何解决方法/提示?
4

2 回答 2

4

确保将应用程序池的“最大工作进程”设置为 > 1,以使工作程序池成为Web Garden。默认情况下,每个应用程序池都设置为仅使用一个进程,这会导致请求排队。

您可能还想查看这篇关于在 IIS7 上以集成模式使用 ASP.NET 2.0 的文章

  1. ASP.NET 线程设置不用于控制集成模式下的请求并发

system.web/httpRuntime 配置部分中的 minFreeThreads、minLocalRequestFreeThreads 设置和 processModel 配置部分中的 maxWorkerThreads 设置不再控制 ASP.NET 使用的线程机制。相反,ASP.NET 依赖于 IIS 线程池,并允许您通过设置位于 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 中的 MaxConcurrentRequestsPerCPU DWORD 值(默认值为 12)来控制最大并发执行请求数钥匙。此设置是全局设置,不能针对单个应用程序池或应用程序进行更改。解决方法

A. 要控制应用程序的并发性,请设置 MaxConcurrentRequestsPerCPU 设置。

于 2010-04-20T04:17:07.900 回答
3

您是否在 Web 服务中使用会话状态?对使用会话状态的页面的请求被序列化;也许您的服务也是如此。

ASP.NET 和 IIS 通常并行处理请求。如果他们不是,那么有些东西正在阻止它。

于 2010-04-20T06:29:33.063 回答