【发布时间】:2019-08-17 04:58:16
【问题描述】:
正如标题所示,我们需要在完全更新的 IIS 8.5 Windows Server 2012 中同时托管两个不同的网站(每个网站都有自己的应用程序池)。
一个网站是 ASP.NET MVC5,运行在 32 位模式,而另一个网站是一个 .netcore2.2 网站,运行在 64 位模式。
.netcore2.2 需要在 IIS 中加载 AspNetModuleCoreV2.dll。问题是这会导致 32 位网站在加载时崩溃(503 服务不可用)。
如果我们从 ApplicationHost.config 中删除 64 位 AspNetModuleCoreV2.dll 指向:
C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll
(or even replace it with the 32bit flavor C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll)
然后 32 位网站可以正常工作,但这会导致 64 位 .netcore2.2 网站失败。
那么,在 IIS8.5 的同一屋檐下,我们如何才能让两个网站都满意呢?我们尝试过的事情:
在 32 位网站的 web.config 中使用删除处理程序调整:
<handlers>
<remove name="AspNetCoreModule" />
<remove name="AspNetCoreModuleV2" />
</handlers>
不幸的是,这不起作用。仍然得到 503(更新:好主意坏执行 - 请阅读下文 - 我们可能对此犯了错误!)
更新:嗯,在写这两件事时,我们几乎立刻就想到了:
-
要删除一个模块,我们应该在 Web.config 中使用以下部分(而不是
): < system.webServer > < modules > < remove name="AspNetCoreModule" /> < remove name="AspNetCoreModuleV2" /> < /modules> < system.webServer> -
由于某种原因,安装程序将 AspNetCoreModuleV2 模块安装为:
C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll
代替:
%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll
当涉及到 32 位网站时,环境变量可能会有所不同。打算试试看。
【问题讨论】:
-
我猜他们必须在不同的网站和不同的应用程序池上运行。
-
我忘了说:它们是不同的网站,它们运行在不同的应用程序池中。感谢您指出需要澄清。
标签: c# asp.net iis asp.net-core .net-core