IIS 6/7线程 - 长时间运行的aspx页面阻止其他aspx页面加载

时间:2010-10-11 22:58:18

标签: asp.net iis iis-7 iis-6 asp.net-2.0

我写了一个测试页面,它在一个名为页面加载的方法中做了很多繁忙的工作。我现在这个过程大约需要12秒钟。

如果我在第一个长时间运行的页面加载时尝试加载另一个页面,除了写出一个hello世界之外,第二个页面什么都不做,直到第一个长时间运行的页面完成才会加载。

为什么会这样?我认为IIS能够处理多个并发连接,一个长时间运行的页面会阻止应用程序中的每个其他页面加载,这似乎很疯狂。我必须遗漏一些东西或者不理解IIS是如何工作的。

我认为会在不同的线程上产生多个独立的请求。如果请求完全来自不同的会话,是否只有这种情况?来自单个会话的所有请求都绑定到单个线程吗?

BD

3 个答案:

答案 0 :(得分:6)

您需要关闭sessionState ...如果会话已启用,则任何后续请求正在等待上一个线程完成以继续该特定会话。

因此关闭会话,它不需要等待任何先前的会话。

在web.config put

<system.web>
    <sessionState mode="Off" />
</system.web>

现在你应该同时拥有这些请求流程。

答案 1 :(得分:5)

我也遇到了这个问题,对我而言,事实证明它是ASP.NET的会话功能。基本上,如果您启用了会话,则每个请求都将按其到达的顺序返回每个用户

尝试使用2种不同的浏览器,对我来说它不再被阻止。这是一个类似的问题:

IIS 5.1 on XP Classic ASP appears to be in single threaded mode

答案 2 :(得分:0)

这是一个线程问题。虽然IIS可以同时处理多个连接,但默认情况下,ASP.NET是以单线程模式配置的。

Microsoft的这一选择是为了防止虚拟开发人员犯下常见的并发错误。用于Mono的ASP.NET不会显示此行为,如果您在没有事先锁定的情况下访问共享资源,则可能是...... f ...您知道;)黄页死亡。

我不记得确切的程序,但在您网站的属性中,您可以选择应用程序池以及线程数。我用眼睛看到IIS6默认将它设置为1。

如果找不到,请告诉我明天我将在实验室中查看我的开发服务器。

希望得到帮助。