IIS7 集成与经典管道 - 使用更多 ASP.NET 线程?

Posted

技术标签:

【中文标题】IIS7 集成与经典管道 - 使用更多 ASP.NET 线程?【英文标题】:IIS7 Integrated vs Classic Pipeline - which uses more ASP.NET threads? 【发布时间】:2010-02-25 21:30:23 【问题描述】:

使用集成管道,所有请求都通过 ASP.NET 传递,包括图像、CSS。

而在经典管道中,默认情况下只有对 ASPX 页面的请求通过 ASP.NET 传递。

集成管道会对线程使用产生负面影响吗?

假设我从 IIS 服务器请求 500 MB 二进制文件:

通过集成管道,一个 ASP.NET 将使用工作线程 用于二进制下载(对吗?)。 使用经典管道,请求是 由 IIS 直接提供服务,因此没有 ASP.NET 使用线程。

对我来说,这有利于经典管道,因为我希望尽可能多的线程来服务 ASPX 页面。

我完全不在这儿吗?

【问题讨论】:

【参考方案1】:

如果您查看 IIS 7 中的 machine.config、web.config 和 applicationHost.config,您会发现在经典管道和集成管道之间切换时,提供静态内容的方式不会改变。唯一改变的是映射到 asp.net 的请求是通过托管模块还是通过本机 ISAPI 过滤器模块。

唯一可能影响性能的事情是,如果您修改了授权模块的默认设置,以及您在处理静态内容请求时添加的任何自定义模块的执行情况。即使在这里,开销也可能可以忽略不计。

因此,更合适的基准是 IIS 6 与 IIS 7,我怀疑 IIS 7 将是明显的赢家。

【讨论】:

【参考方案2】:

我会说你是对的,但我会从另一个角度看待它。

您需要处理非 ASPX 页面的请求吗?例如,记录它们,或者在某些条件不满足时禁止响应。

如果您需要这种处理能力,请使用集成管道。如果不这样做,请使用经典管道。

【讨论】:

我需要提供静态内容:CSS、JS、JPG、PNG 等。这些(尤其是图片)占用的带宽比 ASPX 页面内容更大。 但是对于这个静态内容,您是否需要 .NET 代码进行任何处理? 不,但我在这里的假设是,使用集成管道将导致静态内容由 ASP.NET 传递,而不是直接由 IIS 传递。 这也是我的理解方式,也是我试图在答案中解释的内容:-) 使用经典管道模式。 在 IIS7 asp.net 和 IIS 中如此结合,以至于“由 ASP.NET 提供,而不是直接由 IIS 提供”的声明不再有意义。在 IIS6 中,IIS 使用 ISAPI 模块将请求转发到 asp.net 运行时,而在 IIS7 中,asp.net 是一等公民,您不再有这种开销。就像 Chris Eldredge 指出的那样,关于静态文件没有区别。

以上是关于IIS7 集成与经典管道 - 使用更多 ASP.NET 线程?的主要内容,如果未能解决你的问题,请参考以下文章

IIS7 应用程序池的 托管管道模式与集成模式小结转帖

IIS7.0经典和集成的区别

iis7.0的运行模式的方法简介

IIS 7 托管管道模式 经典模式(Classic) 集成模式(Integrated) 分析与理解

IIS经典模式VS集成模式

IIS7应用程序池集成和经典的区别