.Net 核心服务在发布到 IIS 后不可用

Posted

技术标签:

【中文标题】.Net 核心服务在发布到 IIS 后不可用【英文标题】:.Net core Service Unavailable after Publish to IIS 【发布时间】:2019-07-06 23:59:15 【问题描述】:

在我尝试访问 IIS 后,我收到错误消息: 服务不可用

HTTP 错误 503。服务不可用。

接下来我该怎么做?

我使用带有 IIS 8.5 的 Windows Server 2008(64 位)。该应用程序是 web api .NET CORE 2.2.1。

在我安装的 Windows 机器上:

Microsoft .NET CORE 2.2.1 - Windows 服务器托管 Microsoft .NET CORE 运行时 - 2.2.1(x64) Microsoft .NET CORE 运行时 - 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

我从视觉工作室制作了一份出版物。进入模块上的 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);
            );

【问题讨论】:

检查 EventViewer->Windows 日志->服务器上的应用程序是否有任何错误。 eventViewer 中没有错误。 docs.microsoft.com/en-us/aspnet/core/host-and-deploy/… 还有更多需要检查(一旦您重新启用应用程序池)。 【参考方案1】:

您可以检查以下步骤来检测问题。

    确保已安装 .net 核心运行时和 AspNetCoreModule 并安装后重新启动操作系统。 确保您的应用程序池 .Net 框架版本在 iis 上为“无托管代码”。 确保您的应用程序正确预热。 (在您的应用程序所在的目录中打开命令提示符。输入dotnet yourapp.dll,然后按回车键。)

    如果您的应用程序在 IIS 下运行并且您设置了与 https 的绑定,您需要指定一个带有与其关联的 SSL 证书的 url,当您运行 dotnet yourapp.dll 时,默认情况下它将在 localhost 上运行,如果您不这样做'不要在您的 Program.cs 上指定对 UseUrls 的调用。然后你可以打电话给你的dotnet yourapp.dll,它会工作的

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

    如果应用程序使用 dotnet 命令正确启动,请检查日志文件位置的访问级别(“.\logs\stdout”)。要赋予应用程序池用户读写能力,请执行以下步骤https://***.com/a/7334485/4172872

更新:

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

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

【讨论】:

如上所述,如果前两步不能解决您的问题,第三步将为您提供清晰的画面。 1.我有 AspNetCoreModule 和 AspNetCoreModulev2。 2. IIS 上的应用程序池设置为无托管代码 3. 当我运行 dotnet app.dll 时,应用程序工作正常 你能检查日志文件是在.\logs\stdout下创建的吗【参考方案2】:

还有这个 https://github.com/dotnet/aspnetcore/issues/10117 - 这是 .NET Core 的一个持续未解决的问题

这不是“旧” ASP.NET 的问题,因为它能够将请求“重叠”到两个进程中:(

【讨论】:

以上是关于.Net 核心服务在发布到 IIS 后不可用的主要内容,如果未能解决你的问题,请参考以下文章

503 服务不可用没有被任何 IIS 错误页面或 ASP.net 错误页面处理

IIS 中的服务不可用消息

如何优雅地关闭 ASP.Net(非核心)

HTTP 错误 503 Windows 10 秋季更新后服务在 IIS 上不可用

IIS HTTP 错误 503。服务不可用

IIS 服务器上的 Web API 内的 Httpclient GetAsync 失败(503 服务不可用)