无法在本地以及具有IIS的服务器上运行.net核心应用程序

时间:2020-01-10 08:17:20

标签: api asp.net-core iis

我创建了一个.net核心api(版本2.2.0),尝试在IIS上运行时遇到以下错误。

申请流程无法启动申请流程 已启动但随后已停止应用程序已启动但未能成功 在配置的端口上监听

我验证了我的Web配置,它似乎具有正确的一组值。已启用的日志记录和日志文件为空。

事件日志显示以下错误。

enter image description here

我安装了主机捆绑包,并检查仍然出现相同的错误。还尝试将IIS_IUSRS的权限授予输出文件夹。没什么区别。说了错误代码“'0x80004005'”时,提示权限错误。仍然不知道。感谢任何帮助! 网页配置

<?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=".\MyApi.exe" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>`enter code here`
<!--ProjectGuid: 4d7644bb-9348-46f9-8397-95f01e03d599-->

1 个答案:

答案 0 :(得分:1)

确保您在iis中正确发布了网站。您的站点根文件夹具有足够的权限,可以通过iis访问它。将iis_iusrs和iusr权限分配给站点文件夹。您的应用程序池标识是设置的应用程序池标识或本地系统。启用匿名身份验证。并且您安装了iis asp.net功能。确保您的站点绑定正确并且应用程序池使用正确的.net版本并在集成的应用程序池下运行。

错误消息背后的原因

HTTP错误502.5-错误的网关和HTTP错误502.5-进程 IIS无法执行时,ASP.NET Core中会出现失败错误消息 dotnet进程。

  • 未安装.NET Core Runtime
  • web.config文件尚未转换

要解决此问题,您可以采用以下建议的一种方法:

  1. 安装.NET Core运行时

最常见的原因是您尚未在服务器上安装.NET Core运行时。

您可以从Microsoft的.NET download page下载最新的.NET Core运行时。

在安装Bundle之后,请停止iis并重新启动。

发布自包含部署

如果您不想安装.NET Core Runtime。 .NET Core Web应用程序的另一种选择是在自包含部署模式下发布它们,该模式包括所需的.NET Runtime文件以及应用程序。

enter image description here

如果使用此选项,则还需要选择目标运行时:win-x86,win-x64,osx-x64或linux-x64。因为独立的部署无法移植。

  1. 转换您的web.config文件

发生此错误的另一个原因是当您部署未转换的web.config文件时。

如果您以前使用过Web应用程序,而只是部署了新版本,则可能是您遇到的问题。

在ASP.NET Core应用程序中,web.config文件包含将请求定向到AspNetCoreModule的处理程序和一个aspNetCore元素,该元素定义并配置ASP.NET Core进程以执行Web应用程序。

这是ASP.NET Core应用程序的最小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="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" 
        stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>

问题是未转换的web.config包含变量%LAUNCHER_PATH%和%LAUNCHER_ARGS%,而不是正确的路径。当IIS尝试运行ASP.NET Core时,它将使用%LAUNCHER_PATH%和%LAUNCHER_ARGS%,而不是正确的路径和参数。 要修复ASP.NET Core中的HTTP错误502.5,您需要转换web.config并替换IIS Web服务器上未转换的web.config文件。

转换web.config文件的步骤:

当您选择发布Web应用程序时,将进行此转换。转换后的web.config最终位于发布的输出文件夹中。因此,您只需要发布Web应用程序并将生成的web.config文件复制到服务器上即可。

在转换后的web.config文件中,aspNetCore元素将如下所示:

<aspNetCore processPath="dotnet" arguments=".\MyApplication.dll" stdoutLogEnabled="true" 
stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

%LAUNCHER_PATH%已被dotnet替换,%LAUNCHER_ARGS%已被主Web应用程序dll。\ MyApplication.dll的路径替换。

链接:

Publish an ASP.NET Core app to IIS