IIS .NET Core 5.0 MVC API - 获取 HTTP 错误 500.30 - ASP.NET 核心应用程序无法启动
IIS .NET Core 5.0 MVC API - Getting HTTP Error 500.30 - ASP.NET Core app failed to start
尝试过 和其他类似帖子中的建议,但运气不佳。
我的 API 在 VS2019 中工作得很好 运行 IIS Express,但发布后它就无法启动。
这是我的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyApi.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
已经尝试了 inprocess 和 outprocess,前提是环境变量没有区别。
代码部署到C:\inetpub\wwwroot\MyApi
IIS_IUSRS 已获得 read/write 访问 wwwroot 文件夹的权限
这是我工作的 lunchsettings.json 来自 VS 项目的文件
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44307",
"sslPort": 44307
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyApi": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
这是我的program.cs
public class Program
{
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
_ = webBuilder.UseStartup<Startup>();
})
.ConfigureServices(services =>
{
_ = services.AddHostedService<MyApiWorker>().Configure<EventLogSettings>(config =>
{
config.LogName = "My API";
config.SourceName = "My API";
});
});
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
}
IIS 登录 /inetpub/logs/logfiles 并不是那么有用(4443 是我添加到 IIS 时使用的端口)。
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2021-10-27 09:31:01
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2021-10-27 09:31:01 ::1 GET / - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 4
2021-10-27 09:31:07 ::1 GET / - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 0
2021-10-27 09:32:39 ::1 GET /swagger - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 0
2021-10-27 09:36:45 ::1 GET / - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 0
如有任何想法,我们将不胜感激。我似乎找不到任何有意义的日志,而且应用程序输出的日志从不发布任何内容。
编辑:应用程序池没有托管代码
已安装 dotnet-hosting-5.0.11-win.exe 并多次重启 IIS。
事件日志显示:
具有物理根 'C:\inetpub\wwwroot\myapi' 的应用程序“/LM/W3SVC/1/ROOT”无法加载 coreclr。异常信息:
托管服务器在 120000 毫秒后未初始化。
编辑 2 现在在事件日志中得到这个:
The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID
{3480A401-BDE9-4407-BC02-798A866AC051}
and APPID
{30AD8C8E-AE85-42FA-B9E8-7E99E3DFBFC5}
to the user IIS APPPOOL\DotNetCore SID (S-1-5-82-2530134163-791093599-2246298441-3166710890-3969430272) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.
所有 stdout 记录 0kb 空文件
编辑 3
我也可以通过双击 exe 进入文件夹并 运行 它,但由于某些原因,IIS 不会。这是没有意义的。我得到的只是这个错误:
Application '/LM/W3SVC/1/ROOT' with physical root 'C:\inetpub\wwwroot\myapi\' failed to load coreclr. Exception message:
Managed server didn't initialize after 120000 ms.
延长超时也无济于事,手动执行时需要几秒钟才能起床并 运行ning.
编辑 4
我在 API 中有一些 Google Gmail 函数可以发送错误邮件。似乎他们造成了问题。删除了 google 东西的所有痕迹,启动不再需要几分钟。我怀疑这是因为 Google 试图让 IIS 接受使用 Gmail 的条款,但这显然不可能发生。
现在已经解决了,我仍然收到一个新错误:
Application '/LM/W3SVC/1/ROOT' with physical root 'C:\inetpub\wwwroot\myapi\' has exited from Program.Main with exit code = '0'. Please check the stderr logs for more information.
但是没有找到 stderr 消息,但至少错误是不同的。
我能够在我的 windows IIS 上托管。
先决条件:您需要在服务器上安装 .Net Core Hosting Bundle。
在 IIS 管理器中,
已在 IIS 中创建新网站并指向您发布代码的文件夹。 IIS Website
创建网站时,会自动创建在 ApplicationPoolIdentity 上运行的应用程序池。确保 .Net CLR 版本为“无托管代码”app pool
重置 IIS
浏览应用程序url:http://:port/
- 请确保您已在服务器上安装 .net 核心
- 将您的应用程序池设置为无托管代码
- 如果还是不行,请检查错误日志
我按照这些步骤 https://dotnetblog.asphostportal.com/how-to-publish-asp-net-core-blazor-application-to-iis/ 并且我的应用程序运行完美。
好的,所以我在没有任何有用日志的情况下想通了。
它不会 运行 Google 身份验证这一事实让我开始考虑是否需要像我自己一样 运行 应用程序池,所以我设置了应用程序池标识作为我的用户帐户。没有骰子。然后我发现这个post:
按照他们的建议进行操作,现在应用程序报告开始正常。我可以看到它是 运行ning 并且可以到达端点的日志。
还能够添加回我的 Google 电子邮件通知授权。一切正常。
我还借此机会将应用程序池的超时设置为 0,并将其设置为启动模式:始终 运行。
尝试过 和其他类似帖子中的建议,但运气不佳。
我的 API 在 VS2019 中工作得很好 运行 IIS Express,但发布后它就无法启动。
这是我的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyApi.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
已经尝试了 inprocess 和 outprocess,前提是环境变量没有区别。
代码部署到C:\inetpub\wwwroot\MyApi
IIS_IUSRS 已获得 read/write 访问 wwwroot 文件夹的权限
这是我工作的 lunchsettings.json 来自 VS 项目的文件
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44307",
"sslPort": 44307
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyApi": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
这是我的program.cs
public class Program
{
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
_ = webBuilder.UseStartup<Startup>();
})
.ConfigureServices(services =>
{
_ = services.AddHostedService<MyApiWorker>().Configure<EventLogSettings>(config =>
{
config.LogName = "My API";
config.SourceName = "My API";
});
});
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
}
IIS 登录 /inetpub/logs/logfiles 并不是那么有用(4443 是我添加到 IIS 时使用的端口)。
#Software: Microsoft Internet Information Services 10.0
#Version: 1.0
#Date: 2021-10-27 09:31:01
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2021-10-27 09:31:01 ::1 GET / - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 4
2021-10-27 09:31:07 ::1 GET / - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 0
2021-10-27 09:32:39 ::1 GET /swagger - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 0
2021-10-27 09:36:45 ::1 GET / - 4443 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.54+Safari/537.36 - 500 0 2147500037 0
如有任何想法,我们将不胜感激。我似乎找不到任何有意义的日志,而且应用程序输出的日志从不发布任何内容。
编辑:应用程序池没有托管代码 已安装 dotnet-hosting-5.0.11-win.exe 并多次重启 IIS。
事件日志显示: 具有物理根 'C:\inetpub\wwwroot\myapi' 的应用程序“/LM/W3SVC/1/ROOT”无法加载 coreclr。异常信息: 托管服务器在 120000 毫秒后未初始化。
编辑 2 现在在事件日志中得到这个:
The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID
{3480A401-BDE9-4407-BC02-798A866AC051}
and APPID
{30AD8C8E-AE85-42FA-B9E8-7E99E3DFBFC5}
to the user IIS APPPOOL\DotNetCore SID (S-1-5-82-2530134163-791093599-2246298441-3166710890-3969430272) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.
所有 stdout 记录 0kb 空文件
编辑 3 我也可以通过双击 exe 进入文件夹并 运行 它,但由于某些原因,IIS 不会。这是没有意义的。我得到的只是这个错误:
Application '/LM/W3SVC/1/ROOT' with physical root 'C:\inetpub\wwwroot\myapi\' failed to load coreclr. Exception message:
Managed server didn't initialize after 120000 ms.
延长超时也无济于事,手动执行时需要几秒钟才能起床并 运行ning.
编辑 4 我在 API 中有一些 Google Gmail 函数可以发送错误邮件。似乎他们造成了问题。删除了 google 东西的所有痕迹,启动不再需要几分钟。我怀疑这是因为 Google 试图让 IIS 接受使用 Gmail 的条款,但这显然不可能发生。
现在已经解决了,我仍然收到一个新错误:
Application '/LM/W3SVC/1/ROOT' with physical root 'C:\inetpub\wwwroot\myapi\' has exited from Program.Main with exit code = '0'. Please check the stderr logs for more information.
但是没有找到 stderr 消息,但至少错误是不同的。
我能够在我的 windows IIS 上托管。
先决条件:您需要在服务器上安装 .Net Core Hosting Bundle。
在 IIS 管理器中,
已在 IIS 中创建新网站并指向您发布代码的文件夹。 IIS Website
创建网站时,会自动创建在 ApplicationPoolIdentity 上运行的应用程序池。确保 .Net CLR 版本为“无托管代码”app pool
重置 IIS
浏览应用程序url:http://:port/
- 请确保您已在服务器上安装 .net 核心
- 将您的应用程序池设置为无托管代码
- 如果还是不行,请检查错误日志
我按照这些步骤 https://dotnetblog.asphostportal.com/how-to-publish-asp-net-core-blazor-application-to-iis/ 并且我的应用程序运行完美。
好的,所以我在没有任何有用日志的情况下想通了。
它不会 运行 Google 身份验证这一事实让我开始考虑是否需要像我自己一样 运行 应用程序池,所以我设置了应用程序池标识作为我的用户帐户。没有骰子。然后我发现这个post:
按照他们的建议进行操作,现在应用程序报告开始正常。我可以看到它是 运行ning 并且可以到达端点的日志。
还能够添加回我的 Google 电子邮件通知授权。一切正常。
我还借此机会将应用程序池的超时设置为 0,并将其设置为启动模式:始终 运行。