IIS 8.5:托管32位ASP.NET MVC5网站以及64位.netcore2.2网站的问题

问题描述 投票:0回答:1

正如标题所示,我们需要在IIS 8.5 Windows Server 2012中完全更新并排托管两个不同的网站(每个网站都有自己的应用程序池)。

一个站点是ASP.NET MVC5并以32位模式运行,而另一个站点是以64位模式运行的.netcore2.2网站。

.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中使用remove-handler调整:

<handlers>
   <remove name="AspNetCoreModule" />
   <remove name="AspNetCoreModuleV2" />
</handlers>

不幸的是,这没有用。仍然得到503(更新:好主意糟糕的执行 - 请阅读下面 - 我们可能会对此进行蠢事!)

更新:嗯,在写这两件事时几乎立即出现在我们的脑海中:

  1. 要删除模块,我们应该在Web.config中使用以下部分(而不是<handlers>): < system.webServer > < modules > < remove name="AspNetCoreModule" /> < remove name="AspNetCoreModuleV2" /> < /modules> < system.webServer>
  2. 出于某种原因,安装程序将AspNetCoreModuleV2模块安装为: C:\ Program Files \ IIS \ Asp.Net核心模块\ V2 \ aspnetcorev2.dll

代替:

%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

环境变量是可能在32位网站上产生差异的差异。去尝试一下。

c# asp.net iis asp.net-core .net-core
1个回答
0
投票

原来,罪魁祸首确实是(无论出于什么原因).netcore2.2的运行时安装程序决定在IIS的ApplicationHost.config中硬编码'aspnetcorev2.dll'的路径,让它指向C:\ Program Files .. 。

如前所述,注册模块的正确方法是:

   %ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll 

这样,当一个网站以32位模式运行时,它将加载正确的dll风格:

   C:\Program Files (x86)\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll 

从那时起,一切都会奏效。

如果你想在部署到无法控制的客户端服务器时发挥它的额外安全性,你可能还需要在32位ASP.NET MVC5的Web.config中另外明确删除任何和所有'aspnetcorev2'模块,如下所示:

      < system.webServer >

        < modules >

          < remove name="AspNetCoreModule" />

          < remove name="AspNetCoreModuleV2" />

        < /modules>

      < system.webServer>
© www.soinside.com 2019 - 2024. All rights reserved.