虚拟目录中的 Azure 多个站点
Azure multiple sites in virtual directories
我有 3 个 asp.net 核心站点需要部署在同一个域中(子域不能使用我的 SSL 证书)。
- https://my-site.com(单页应用)
- https://my-site.com/api(网络 api)
- https://my-site.com/identity(身份服务器)
当我部署 api 和身份项目时,它们工作正常。但是,在部署单页应用程序时,api 和身份停止工作。
The page cannot be displayed because an internal server error has occurred.
错误立即出现,所以我猜它可能在启动早期就失败了。
单页应用程序运行正常。
似乎水疗中心在干扰,我尝试了 的解决方案来忽略路由,但我得到了同样的错误。
我已尝试解决方案 以获得更具描述性的错误,但无济于事。
不知道从这里到哪里去
问题的原因是根应用程序和子应用程序都添加了 aspNetCore
处理程序,导致配置系统崩溃。您可以通过在 Azure 门户中打开 详细错误消息 ,然后在 D:\home\LogFiles\DetailedErrors
下找到错误页面来查看。您会看到此错误:
Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'aspNetCore'
有两种方法可以解决这个问题。
第一种是使用location
标签来防止继承。具体来说,将您的根应用程序的 web.config
从以下内容更改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\myapp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>
像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\myapp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
</system.webServer>
</location>
</configuration>
第二种方法是从 sub 应用程序中删除 <handlers>
部分以避免重复(如 doc 中建议的 子应用的配置):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet" arguments=".\mySubApp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>
我有 3 个 asp.net 核心站点需要部署在同一个域中(子域不能使用我的 SSL 证书)。
- https://my-site.com(单页应用)
- https://my-site.com/api(网络 api)
- https://my-site.com/identity(身份服务器)
当我部署 api 和身份项目时,它们工作正常。但是,在部署单页应用程序时,api 和身份停止工作。
The page cannot be displayed because an internal server error has occurred.
错误立即出现,所以我猜它可能在启动早期就失败了。 单页应用程序运行正常。
似乎水疗中心在干扰,我尝试了
我已尝试解决方案
不知道从这里到哪里去
问题的原因是根应用程序和子应用程序都添加了 aspNetCore
处理程序,导致配置系统崩溃。您可以通过在 Azure 门户中打开 详细错误消息 ,然后在 D:\home\LogFiles\DetailedErrors
下找到错误页面来查看。您会看到此错误:
Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'aspNetCore'
有两种方法可以解决这个问题。
第一种是使用location
标签来防止继承。具体来说,将您的根应用程序的 web.config
从以下内容更改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\myapp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>
像这样:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\myapp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
</system.webServer>
</location>
</configuration>
第二种方法是从 sub 应用程序中删除 <handlers>
部分以避免重复(如 doc 中建议的 子应用的配置):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet" arguments=".\mySubApp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>