【问题标题】:Website is not responding when a handler is processing处理程序处理时网站没有响应
【发布时间】:2012-05-05 12:41:23
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 如果我使用 Thread.Sleep(1000000) 创建一个页面并加载它,也会发生同样的情况。所有其他页面都无法访问。
  • 如果有人在上传东西,同样的行为......所有其他页面都无法访问

标签: asp.net iis-7 windows-server-2008 threadpool worker-process


【解决方案1】:

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

MSDN 上提供了创建IHttpAsyncHandler 的演练,请参阅Walkthrough: Creating an Asynchronous HTTP Handler。

编辑: 您还可以尝试增加并发请求的数量,使用:

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

请参阅 ASP.NET 论坛上的讨论,http://forums.asp.net/t/1447626.aspx/1。

【讨论】:

  • 我是唯一的用户(因为我正在测试它)...而且我每次只能发出一个请求,否则 IIS 在另一个请求完成之前不会回复...我怎么可能使用所有可用的线程?
  • 你能发布实现吗?
  • 你也可以看看这个链接forums.asp.net/t/1447626.aspx/1。它告诉你如何增加并发请求的数量。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 2014-04-22
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多