【问题标题】:IIS 8.5: Problem hosting a 32bit ASP.NET MVC5 website along with a 64bit .netcore2.2 websiteIIS 8.5:托管 32 位 ASP.NET MVC5 网站和 64 位 .netcore2.2 网站时出现问题
【发布时间】: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(更新:好主意坏执行 - 请阅读下文 - 我们可能对此犯了错误!)

更新:嗯,在写这两件事时,我们几乎立刻就想到了:

  1. 要删除一个模块,我们应该在 Web.config 中使用以下部分(而不是 ):

    < system.webServer >
    
      < modules >
    
        < remove name="AspNetCoreModule" />
    
        < remove name="AspNetCoreModuleV2" />
    
      < /modules>
    
    < system.webServer>
    
  2. 由于某种原因,安装程序将 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


【解决方案1】:

事实证明,罪魁祸首确实是(无论出于何种原因).netcore2.2 的运行时安装程序决定在 IIS 的 ApplicationHost.config 中硬编码“aspnetcorev2.dll”的路径,使其指向 C:\Program文件...

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

   %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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2016-08-28
    • 2019-07-20
    相关资源
    最近更新 更多