IIS 8.5:托管32位ASP.NET MVC5网站和64位.netcore2.2网站时出现问题

时间:2019-03-26 17:51:34

标签: c# asp.net iis asp.net-core .net-core

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

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

.netcore2.2需要将AspNetModuleCoreV2.dll加载到IIS中。问题是这会导致32位网站在加载时崩溃(503服务不可用)。

如果我们从ApplicationHost.config中删除指向以下内容的64位AspNetModuleCoreV2.dll:

AbstractEntity

然后32位网站正常运行,但这会导致64位.netcore2.2网站失败。

那么我们如何才能使两个网站在IIS8.5的同一个屋顶下开心呢?我们尝试过的事情:

在32位网站的web.config中使用remove-handler调整项:

tcpdump

不幸的是,这没有奏效。仍然获得503(更新:好主意,执行不佳-请阅读下文-我们可能对此感到无聊!)

更新:Hmmm在编写这两件事时几乎立即想到了:

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

    node:10.0.0
  2. 由于某种原因,安装程序将AspNetCoreModuleV2模块安装为:

    C:\ Program Files \ IIS \ Asp.Net核心模块\ V2 \ aspnetcorev2.dll

代替:

FROM node:10.0.0
EXPOSE $SERVICE_PORT
USER node
RUN mkdir -p /home/node/
WORKDIR /home/node/
COPY package.json /home/node/
RUN npm install
COPY . /home/node/
CMD ["npm", "run", "staging"]

环境变量是不同之处,当涉及到32位网站时,可能会有所不同。要尝试一下。

1 个答案:

答案 0 :(得分:0)

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

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

module.exports = router;

这样,当网站以32位模式运行时,它将从以下位置加载正确的dll版本:

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

从那时起一切都会起作用。

如果要在不受控制的客户端服务器上部署时更加安全,则可能需要另外明确地删除32位ASP.NET MVC5的Web.config中的所有“ aspnetcorev2”模块。像这样:

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