【问题标题】:Multiple Connections to Web Server ASP.NET与 Web 服务器 ASP.NET 的多个连接
【发布时间】:2014-07-15 16:37:05
【问题描述】:

我有一个托管在 IIS 6 上的 ASP.NET Web 服务(将来可能会更改为 IIS 7)。 .asmx 页面可能同时收到许多请求。在收到请求后,每个 CPU 每个请求大约需要 3 秒才能返回响应(因此在双核上两个请求也会在 3 秒内返回)。但是,当多个请求同时进入(或足够接近)时,服务似乎试图让它看起来像是在同时处理所有这些请求。例如,如果有 6 个请求进来,它们都在 9s 左右返回,而不是前两个在 3s 内返回,接下来的 2 个在 6s 内返回,最后 2 个在 9s 内返回。我的问题是:发生了什么事(如果你有耐心,可以简要或详细说明:)),以及如何限制从服务的角度创建的请求或线程的数量,最好不要对 IIS 或machine.config?

提前致谢!

编辑: 只是为了澄清一下,我试图让 Web 服务在第一种情况下执行,其中前 n 个请求被处理(n = 处理器数),然后是下一个请求。现在,如果我一次发送 10 个请求,该服务会将所有请求收集在一起,并将处理分配给所有处理器。在我看来,理论上,如果我可以告诉服务将同时处理的数量限制为 n(对应于处理器的数量),那么我将实现我的目标。但我不知道该怎么做。

【问题讨论】:

  • 这9个请求是来自同一个客户端\会话还是来自不同的客户端?
  • 测试时客户端相同,但发布时可能有多个客户端。
  • 如果您的 Web 服务使用 ASP.Net 会话(具有这样的属性 [WebMethod(EnableSession = true)]),则默认情况下 Session Provider 对同一客户端使用锁定。因此,目前只会处理来自同一客户端的一个请求。所有其他请求都将排队,直到第一个请求释放 Session。
  • 我确实启用了会话。但是多个请求似乎是从同一个客户端处理的,因为它们都是同时完成的。

标签: asp.net web-services asmx


【解决方案1】:

Pro ASP.NET Web API: HTTP Web Services in ASP.NET 书中-

使用 .NET Framework 4.0,默认配置设置为 适用于大多数场景。例如,在 ASP.NET 4.0 和 4.5 中, MaxConcurrentRequestsPerCPU 值默认设置为 5000(它有 在早期版本的 .NET 中是一个非常低的数字)。根据团队 IIS 的成员,值 5000 并没有什么特别之处。 设置,因为它是一个非常大的数字,并且将允许大量异步 请求并发执行。 这个设置应该没问题,所以 无需更改。

提示 Windows 7、Windows Vista 和所有其他 Windows 客户端操作 系统最多处理 10 个并发请求。你需要有一个 Windows Server 操作系统或使用 IIS Express 来看看好处 高负载下的异步方法。

【讨论】:

  • 我实际上使用的是 .net 3.5。但是如何从服务的角度(不是 iis/asp.net 系统范围)减少最大并发请求?
  • 默认情况下,.Net 3.5 是12 requests per CPU。我认为您不想设置得比这更低,因为它已经足够低了。如果没有看到您的代码,我不知道如何为您提供建议。您能否分析您的代码(使用性能分析器和内存分析器)并查看是什么让您的代码变慢?
  • 我怎样才能改变它?
猜你喜欢
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多