.NET Core应用程序在IIS中作为虚拟目录运行时出现502.5错误

5
我遇到了在IIS中配置 .NET Core 应用程序作为虚拟目录的问题。如果我直接使用端口启动 .NET Core 应用程序,则可以正常工作。
我收到 502.5 响应,并在事件查看器中看到以下信息。
Application 'MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE' with physical root 'C:\inetpub\wwwroot\' failed to start process with commandline ' ', ErrorCode = '0x80070057 : 0.

我已经在.net web.config中删除了父处理程序,如下所示。
<handlers>
            <remove name="httpPlatformHandler"/>
            <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
            <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        </handlers>
1个回答

2
为了运行ASP.NET Core应用程序,请确保您做到以下几点:
  • 拥有ASP.NET Core Web Hosting Bundle(服务器必需品!)
  • 发布您的应用程序 - 应该包括一个web.config
  • 将发布输出部署到您的服务器上
  • 设置应用程序池
  • 将.NET Framework设置为none(可选但通常是个好主意)
  • 使用具有虚拟文件夹中读取权限的帐户

托管捆绑包包括IIS的ASP.NET Core模块,它允许IIS启动。没有ASP.NET Core,应用程序将无法在IIS上运行。

您还需要发布您的应用程序,这会产生一个包含二进制文件和配置文件的最终输出文件夹,其中包括根目录下的web.configwwwroot根文件夹以及您的内容。为了测试,您应该确保可以通过命令行运行您的应用程序:

dotnet yourMainAssembly.dll -c Release

如果这个方法不起作用,首先要修复它,因为这基本上是IIS所触发的。一旦独立工作正常,您可以尝试使用IIS。
在Visual Studio中创建的ASP.NET Core项目自动包括一个web.config文件,该文件应该包含您运行IIS所需的所有内容。对于基本设置,这应该就足够了。生成的web.config文件应该能够让您的应用程序运行起来。
如果您正在使用虚拟机,可能会出现父级配置渗透到虚拟机中的问题,因为虚拟机从父级继承设置。如果是这种情况,请选择与应用程序池相同的.NET Framework版本,或与父级共享应用程序池。或者,您可以在<handlers>部分使用<clear />清除任何来自层次结构上方的处理程序。
<configuration>
  <system.webServer>
    <handlers>
      <clear>
      <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" startupTimeLimit="3600" requestTimeout="23:00:00">
      <environmentVariables />
    </aspNetCore>
  </system.webServer>
</configuration>

我在博客文章中详细介绍了如何在IIS上托管网站,以及一些静态文件的额外配置,详情请点击:


1
我的问题可能是由于虚拟目录,因为直接运行时它可以正常工作。 - Mirhat

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