在我的网站中,我有一个处理程序 (GetFile.ashx),当它执行时,可以让您以给定的下载速率下载文件。处理程序需要执行,直到用户完成下载。问题是,当处理程序正在执行时,网站的其他页面(以及处理程序本身)无法访问,并且 IIS 会等到页面完成执行后再响应其他请求。我该如何解决?
我注意到的另一件事是我在 Amazon EC2 上的服务器上使用 IIS7 ...... IIS 怎么可能一次只能处理一个请求?
谢谢你。
在我的网站中,我有一个处理程序 (GetFile.ashx),当它执行时,可以让您以给定的下载速率下载文件。处理程序需要执行,直到用户完成下载。问题是,当处理程序正在执行时,网站的其他页面(以及处理程序本身)无法访问,并且 IIS 会等到页面完成执行后再响应其他请求。我该如何解决?
我注意到的另一件事是我在 Amazon EC2 上的服务器上使用 IIS7 ...... IIS 怎么可能一次只能处理一个请求?
谢谢你。
我解决了。如果您使用实现了 IRequireSession 的页面(或处理程序),则会锁定其他页面的处理,因为它将对会话具有排他锁。解决方案是创建一个不需要会话状态的处理程序。
只能同时执行有限数量的线程,可能是您已用完所有可用线程。您可以尝试使用IHttpAsyncHandler
.
IHttpAsyncHandler
在 MSDN上创建了一个演练,请参阅演练:创建异步 HTTP 处理程序。
编辑:您还可以尝试增加并发请求的数量,使用:
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="24" />
</system.web>
请参阅 ASP.NET 论坛上的讨论,http ://forums.asp.net/t/1447626.aspx/1 。