将旧的应用程序从IIS6转移到IIS8以及经典模式存在的原因

[原文发表地址] Moving old apps from IIS6 to IIS8 and why Classic Mode exists

[原文发表时间] 2013-03-20 7:53 PM

今天我收到一个通过电子邮件发送的有趣的问题。这个问题用一句话概括就是:

我们已经成功地在旧版本的IIS和IIS 8.0 的经典模式下运行了一个程序,为什么ASP.NET运行时会在IIS 8.0里集成模式的程序池里出问题?

比起他们从IIS 6.0转移到IIS 8.0会引起人们的兴趣来,他们从经典模式的管道转移到了集成模式显得更为重要。

简而言之, 这些管道是不同的,如果你写了期望其中一种管道行为的一个程序,然后转移,那么当你把它转移到一个新的管道后,你一直遵循的行为将有可能不同。

IIS6是十几年前在Windows Server 2003 里发布的。应用程序一直用的是ISAPI管道。IIS6里的每一样东西本质上就是我们现在认为的“经典模式”,而不像IIS7里面较新的集成管道

带ASP.NET的IIS6 有两个管道 –IIS非托管管道和托管ASP.NET管道。这里有一个简化过但是非常准确的图(如图所示):

IIS Classic Pipeline is two pipelines. One for IIS and one for ASP.NET

IIS7和8 是用更高级更快速的集成模式管道来重构的,但是为了兼容性它们保留了“经典”模式。

IIS7 and up is one integrated pipeline

“医生,这样做会痛的哎”

“不要那么做啊”

如果你正在把一个IIS6(从定义来看就是 只有“经典”模式)上的旧程序转移到IIS8上, 最快的决定是在IIS8的经典模式下运行它。经典模式是完全被支持的,所以运行经典模式你就不会做错什么了。这就是这个模式存在的原因。

考虑下您的理由,作一个深思熟虑的决定吧。

请记住,不考虑衍生出来的结果的话,当ASP.NET程序想要从在IIS6版本里的老的ISAPI托管模型转移到来自于IIS7较新的集成模型时, 有可能会发生不兼容和边缘情况的行为上的问题。

希望这能有所帮助。