发布到IIS后,.Net Core服务不可用。

10

我在发布我的应用到IIS后,当我尝试访问它时出现错误:

HTTP错误503. 服务不可用。

接下来我该怎么办?

我使用的是安装了以下软件的 Windows Server 2008 (64-bit) 和 IIS 8.5,应用是 web api .NET CORE 2.2.1:

  • Microsoft .NET CORE 2.2.1 - Windows Server Hosting
  • Microsoft .NET CORE Runtime - 2.2.1(x64)
  • Microsoft .NET CORE Runtime - 2.2.1(x86)
  • Microsoft Visual C++ 2015 Redistributable(x86) - 14.024212
  • Microsoft Visual C++ 2015 Redistributable(x64) - 14.024123
  • Microsoft Visual C++ 2008 Redistributable - x86 - 9.0.30729.4148
  • Microsoft Visual C++ 2008 Redistributable - x64 - 9.0.30729.6161

我从 Visual Studio 进行发布,在 IIS 上的模块中我有 AspNetCoreModuleV2。

我的 webconfig 文件内容如下:

<?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=".\App.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
   </system.webServer>
 </location>
</configuration>
<!--ProjectGuid: 9d04b7be-318b-4e95-aae3-c47aab07db30-->

CreateWebHostBuilder方法的代码:

 return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>().UseSerilog((ctx, cfg) =>
            {
                cfg.ReadFrom.Configuration(ctx.Configuration)
                    .MinimumLevel.Verbose()
                    .MinimumLevel.Override("Microsoft", LogEventLevel.Information);
            });

请在服务器上检查事件查看器->Windows日志->应用程序,查看是否有任何错误。 - Mohsin Mehmood
事件查看器中没有错误。 - MrBlue
请参考以下链接:https://learn.microsoft.com/zh-cn/aspnet/core/host-and-deploy/azure-iis-errors-reference?view=aspnetcore-2.2#stopped-application-pool(一旦重新启用应用程序池,还有更多需要检查的内容)。 - Lex Li
2个回答

24

您可以按照以下步骤检测问题:

  1. 确保已安装 .NET Core 运行时和 AspNetCoreModule,并在安装后重新启动操作系统
  2. 确保您的应用程序池 .NET 框架版本在 IIS 上为“无托管代码”。
  3. 确保您的应用程序已正确预热。(在应用程序所在目录中打开命令提示符,输入 dotnet yourapp.dll,然后按回车键。)
  4. 如果您的应用程序在 IIS 下运行并设置了 https 绑定,则需要指定一个与 SSL 证书相关联的 url 才能运行 dotnet yourapp.dll,默认情况下,如果您没有在 Program.cs 中指定 UseUrls 调用,则它将在本地主机上运行。然后您可以调用 dotnet yourapp.dll 它将正常工作

    var host = new WebHostBuilder()     .UseKestrel()     .UseContentRoot(Directory.GetCurrentDirectory())     .UseIISIntegration()     .UseStartup()     .UseUrls("http://mywebsite.com")     .Build();

  5. 如果使用 dotnet 命令启动应用程序,请检查日志文件位置(“.\logs\stdout”)的访问级别。要授予应用程序池用户读取和写入的权限,请执行以下步骤:https://dev59.com/yms05IYBdhLWcg3wR_63#7334485

更新:

应用程序的扩展名确实是“ .exe”吗?

<aspNetCore processPath=".\App.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />

1
如上所建议,如果前两步无法解决您的问题,第三步将为您提供清晰的图片。 - mukesh joshi
  1. 我同时拥有AspNetCoreModule和AspNetCoreModulev2。
  2. IIS中应用程序池设置为无托管代码。
  3. 当我运行dotnet app.dll时,应用程序可以正常工作。
- MrBlue
你能检查日志文件是否已经在 .\logs\stdout 下创建了吗? - levent

1

后续问题 https://github.com/dotnet/aspnetcore/issues/41340,也影响了ASP.NET Core 7 - Benjamin Freitag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接