正如标题所示,我们需要在完全更新的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在编写这两件事时几乎立即想到了:
要删除模块,我们应该在Web.config中采用以下部分(而不是
node:10.0.0
由于某种原因,安装程序将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位网站时,可能会有所不同。要尝试一下。
答案 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