在IIS6中,可以在同一个应用程序池中运行多个ASP.NET应用程序。这很好,除了IIS6中没有任何内容阻止您在同一个池中运行多个.NET版本。
在IIS7中创建应用程序池时,必须明确声明.NET池将在该池中运行。在IIS7中,在同一个应用程序中运行多个.NET版本是不可能的。
如何在IIS6服务器上强制执行此类规则,以防止部署团队造成此类问题?
答案 0 :(得分:11)
我的所作所为:
步骤1.创建以下应用程序池:
.NET 1.1应用程序
.NET 2.0应用程序
步骤2.禁用“默认应用程序池”
现在,只要在IIS中配置新应用程序,它就不会立即生效,因为默认应用程序池已禁用。这会强制配置应用程序的人员选择适合应用程序的.NET框架版本的应用程序池。
答案 1 :(得分:2)
我们倾向于为每个站点使用一个应用程序池,以便每个应用程序在其自己的进程空间中隔离。应用程序池回收只会影响单个应用程序,每个工作进程最终都有自己的4GB内存空间。编程错误的应用程序不可能影响其他应用程序,从而导致高度隔离的部署模型。
我们还对运行32位应用程序池的x64 OS构建进行了标准化。虽然使用这种技术会产生开销,因为每个应用程序ppol都包含.Net框架的单独副本,但我们认为增加的应用程序空间粒度可以增加我们部署的稳定性。您还可以将每个应用程序作为自己的域标识运行,从而允许进一步隔离内存空间,并且无需在Web配置中模拟身份。
使用IIS 7,您可以将每个应用程序池作为32位或64位运行,因此您可以在64位应用程序池中运行大型内存应用程序。 IIS 7应用程序池安全性也更加简化。
答案 2 :(得分:0)
如果我没记错的话,您还可以在IIS6中设置应用程序池(Windows 2003)。每个正在使用的框架版本创建一个应用程序池。
我不知道是否有可能强制执行应用程序使用的.NET框架版本。如果您已经设置了一个应用程序池来使用.NET 1.1,并且您在该应用程序池中运行了一个.NET 2.0应用程序,那么您将在应用程序中获得一个异常(死亡的黄色屏幕),因为它不会找到一些引用的程序集和类。
答案 3 :(得分:0)
我认为你不能。我所做的是在IIS 6中命名我的应用程序池,以便它们显示它们托管的.Net版本。这样,在创建新应用程序时,可以轻松选择正确的应用程序池。