0

在我的网站中,我有一个处理程序(GetFile.ashx),它在执行时允许您以给定下载速率下载文件。处理程序需要执行直到用户完成下载。 问题是,当处理程序正在执行时,网站的其他页面(和处理程序本身)无法访问,并且IIS在等待页面完成执行之后才会响应其他请求。如何解决?当处理程序正在处理时,网站没有响应

我注意到的另一件事是我在Amazon EC2上的服务器上使用IIS7 ...... IIS怎么可能一次只能处理一个请求?

谢谢。

+0

如果我使用Thread.Sleep(1000000)创建页面并加载它,则会发生同样的情况。所有其他页面无法访问。 – 2012-04-24 21:19:46

+0

同样的行为,如果有人上传的东西...所有其他网页变得无法访问 – 2012-04-24 21:31:49

回答

0

只有有限数量的线程可以同时执行,可能是因为你已经用尽了所有可用的线程。您可以尝试使用IHttpAsyncHandler来实现异步HTTP处理程序。

在MSDN上存在用于创建IHttpAsyncHandler的演练,请参阅。

编辑: 你也可以尝试增加并发请求数,使用:

<system.web> 
    <applicationPool maxConcurrentRequestsPerCPU="24" /> 
</system.web> 

参见ASP.NET的论坛讨论,http://forums.asp.net/t/1447626.aspx/1

+0

我是唯一的用户(因为我测试它)...我只能做一次请求,否则IIS不会回复直到另一个请求结束为止......如何才能使用所有可用的线程? – 2012-04-24 20:54:50

+0

我实现了异步处理程序....没有任何改变。 – 2012-04-24 21:12:18

+0

你可以发布实施? – Xharze 2012-04-25 08:44:15

0

我解决了。如果您使用实现IRequireSession的页面(或处理程序),将锁定其他页面进行处理,因为它将对会话具有排它锁定。解决方案是创建一个不需要会话状态的处理程序。