0

我有一个在 IIS7 上运行的网站。为了更好地解释我的问题,我将在一个简单的场景中呈现它。假设我有两个网页,index.phpreport.php,每个内容如下:

索引.php

<?php echo "Hello World"; ?>

报告.php

<?php sleep(60); //simulate a long running script like generating reports. ?>

假设index.php是我们电子商务系统的主页,访问者将访问该主页,report.php是管理人员查看报告的页面,无论何时(最有可能在白天)。问题是当查看需要几分钟才能生成的报告时,整个服务器将变得无响应。在报告完成生成之前,查看index.php的访问者不会得到任何响应。这也适用于 ASP.NET。有什么解决方法吗?

4

1 回答 1

0

解释了 iis6 和 7 中的线程。本质上,一个新线程处理每个新的传入请求。因此,让单个页面休眠一段时间不会影响其他页面的处理。我使用 2 页对此进行了测试。

页面.aspx:

<%@ Page Language="C#" %>
<%=DateTime.Now.ToString() %>

索引.aspx:

<%@ Page Language="C#" %>
<%=DateTime.Now.ToString() %>
<% System.Threading.Thread.Sleep(10000); %>

调用 index.aspx 后,page.aspx 可以重复调用并返回每个请求的当前时间,而对 index.aspx 的第一个请求正在休眠。

如果某些原因导致请求在您的服务器上被阻止,则它可能是您网站上使用的共享资源。在上面的示例中,如果 index.aspx 请求对资源(例如文件或数据库)的独占访问,对 page.aspx 的多个请求将不得不等到 index.aspx 完成并释放资源。

于 2013-06-21T10:12:10.717 回答