【发布时间】: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