Net Core子应用由于配置引起IIS错误500.19
Posted Leo_wlCnBlogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Net Core子应用由于配置引起IIS错误500.19相关的知识,希望对你有一定的参考价值。
ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS。
但我们还是需要强大的IIS作为前置服务器,IIS利用httpPlatformHandler模块来对后台的一些web服务器进行进程管理,比如Tomcat, Jetty, Node.exe, Ruby,当然还有dotnet,同时为它们代理分发网络请求。
httpPlatformHandler是通用的、闭源的,而且貌似迭代的很慢,半年了还停留在带着一个大BUG的v1.2,可能是由于这些原因吧,.NET小组从httpPlatformHandler分支出来一个专门针对dotnet的版本,改名为AspNetCoreModule并且准备把它开源,这样应该能更好地适应.NET Core的发展。
那么要使用IIS,则web.config是必须的,所以我们看到项目文件里的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=".\\WebApplication6.dll" stdoutLogEnabled="false" stdoutLogFile=".\\logs\\stdout" forwardWindowsAuthToken="false" /> </system.webServer> </configuration>
很好理解,<add ../> 添加了一个AspNetCoreModule模块,名字为"aspNetCore",后面的<aspNetCore .. /> 则对这个模块的必要参数进行简单配置。
这样就告诉了IIS,在处理这个站点/应用的时候,使用aspNetCore这个模块,而这个模块则会启动dotnet并分发请求。
不过,当我们在一个ASP.NET Core的站点下增加一个ASP.NET Core子应用的时候,
访问这个子应用会得到500.19错误:
HTTP 错误 500.19
错误代码:0x800700B7
配置错误:在唯一密钥属性“name”设置为“aspNetCore”时,无法添加类型为“add”的重复集合项
查看这个子应用程序的配置,无法显示system.webServer/handlers节点,提示的错误和上图500.19中的配置错误一致:
我们很容易想到,主站点的web.config里已经使用了"aspNetCore"这个名字,那么子应用就不能再用了。
试着修改subapp1的web.config,将"aspNetCore"随便改成其他的名字:
<add name="aspNetCore123" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
这时再访问 /subapp1 就一切正常了。
但是这样改名字并不是一个正确的方法:
提示这种错误是IIS本身一个正常的行为,因为在“website”站点根目录的web.config里,已经用<add ../>添加了模块AspNetCoreModuel了,在子应用里实际上不再需要<add ../>来添加这个模块了,但是任然需要下面的<aspNetCore ../>来进行配置。
所以正确的做法是,在一个站点里,只在根目录web.config里保留<add ../>添加模块,其他子应用程序,都把这一节删除就可以了,即:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <aspNetCore processPath="dotnet" arguments=".\\WebApplication6.dll" stdoutLogEnabled="false" stdoutLogFile=".\\logs\\stdout" forwardWindowsAuthToken="false" /> </system.webServer> </configuration>
经@calvinK 提醒,更妥善的办法是先删除,再添加:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <remove name="aspNetCore"/> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\\WebApplication6.dll" stdoutLogEnabled="false" stdoutLogFile=".\\logs\\stdout" forwardWindowsAuthToken="false" /> </system.webServer> </configuration>
以上是关于Net Core子应用由于配置引起IIS错误500.19的主要内容,如果未能解决你的问题,请参考以下文章
IIS Express 10 上的 ASP.NET Core 应用程序给出 HTTP 500 错误
.NET Core 应用程序 |信息系统 | HTTP 错误 500 - 无法加载配置。异常消息:需要属性“processPath”
尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19
ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
ASP.NET Core 无法在 IIS 下运行:HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
当多个 Blazor 应用程序发布到 IIS 时,我们收到 HTTP 错误 500.35 - ASP.NET Core 不支持同一应用程序池中的多个应用程序 [重复]