IIS无法运行ASP.NET核心站点 - HTTP错误502.5

时间:2017-01-11 12:04:38

标签: asp.net-core asp.net-core-mvc

我们有一台Windows 2012 R2计算机。 我有一个现有的ASP.NET核心站点,它有一个正在运行的已发布的ASP.NET核心站点。

然而,当我在更改后一个月后再次发布到网站时,我无法访问该网站并在浏览器中收到以下错误

  

HTTP错误502.5 - 进程失败

     

有关详细信息,请访问:http://go.microsoft.com/fwlink/?LinkID=808681

如果我登录到服务器并单击我已部署目录中的exe,它会打开一个命令提示符并在端口5000上显示我的站点。如果我在http://localhost:5000上访问该站点,它可以正常工作,所以问题是使用IIS而不是网站本身。

如果我登录服务器,我可以在Windows EventViewer中看到以下内容

enter image description here

  

具有物理根'D:\ Sites \ MySite \'的应用'MACHINE / WEBROOT / APPHOST / DEFAULT网站/ MySite'无法使用命令行'“%LAUNCHER_PATH%”%LAUNCHER_ARGS%'启动进程,ErrorCode ='0x80070002 :0。

当我访问浏览器错误消息中的链接时,它提到重新安装.net Core Hosting捆绑包,我做了。但是,浏览器中的错误消息是相同的。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore requestTimeout="02:00:00" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

当我查看我的应用程序日志文件夹时,每次尝试访问此站点时都会创建一个stdout文件,但每次它的大小为0KB且内容为空。

为什么IIS拒绝在以前工作的地方突然工作,但是如果我直接访问编译的exe,应用程序是否可以工作?

19 个答案:

答案 0 :(得分:31)

您的问题是一个糟糕的web.config文件:

<aspNetCore requestTimeout="02:00:00" 
     processPath="%LAUNCHER_PATH%" 
     arguments="%LAUNCHER_ARGS%" 
     stdoutLogEnabled="true" 
     stdoutLogFile=".\logs\stdout" 
     forwardWindowsAuthToken="false" />

路径%LAUNCHER_PATH%在您的系统上不存在,甚至无效。它应该是这样的:

<aspNetCore requestTimeout="02:00:00" 
     processPath=".\yourAppName.exe" 
     arguments="somePossibleArgument" 
     stdoutLogEnabled="true" 
     stdoutLogFile=".\logs\stdout" 
     forwardWindowsAuthToken="false" />

请注意,如果从命令行启动应用程序,则会完全忽略web.config文件,这就是您没有收到错误的原因。

答案 1 :(得分:31)

我遇到了同样的问题,我的问题是IIS无法获得dotnet的路径。我能够通过指定dotnet.exe的路径来修复它

<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe" arguments=".\your-project.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"/>
  </system.webServer>
</configuration>

答案 2 :(得分:8)

我的问题是,由于appsettings.json文件中的转义序列无效,该过程无法启动。

我使用dotnet运行已发布的ASPNET Core 2 web api dll。通过打开命令提示符并导航到站点文件所在的目录,可以发现问题。在那里,我运行命令:

dotnet mySite.dll

(将mySite.dll更改为您应用的主dll。另外,请确保已安装正确版本的.NET Core Windows Server Hosting捆绑包。)

按Enter键,它立即崩溃,在控制台窗口中显示错误的确切反馈。如果您遇到类似的问题,这是帮助确定启动错误的好方法。

答案 3 :(得分:2)

我在部署应用程序时遇到了同样的问题。我的结局有几个问题:)

我非常仔细地浏览了这个页面:ASP.NET Core: Publishing to IIS

首先,我没有安装.NET Core Windows Server Hosting bundle的所有部分。我最终做了一个依赖于fremework的部署而不是一个自包含的部署。我们有很多应用程序,并且不希望/需要各自的.net核心版本。盒子上会有太多版本的.net。

另请注意,如果您的管理员对服务器执行了任何更新/升级,他们可能已经安装了您的ASP.NET Core安装(请参阅ASP.NET Core: Publishing to IIS疑难解答部分)

然后,我必须修复我的web.config ...这是我的工作发布的web.config: 我没有发布* .exe,我做* .dll(注意我的论点值)。另外,我的processPath设置为&#34; dotnet&#34;。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\DT.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

另外,请确保您的project.json选项全部与您的服务器环境兼容(请参阅ASP.NET Core: Publishing to IIS疑难解答部分)

这是我的project.json的副本,如果它可以提供任何帮助:

{
  "version": "2.0.1.0",

  "dependencies": {
    "DT.Common": "2.*",
    "DT.Configuration": "2.*",
    "DT.Services": "2.*",
    "DT.Web.ViewModels": "2.*",
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
    "Microsoft.AspNetCore.Authentication": "1.1.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.1.0",
    "Microsoft.AspNetCore.Authentication.OpenIdConnect": "1.1.0",
    "Microsoft.AspNetCore.Diagnostics": "1.1.0",
    "Microsoft.AspNetCore.Mvc": "1.1.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.1.0-preview4-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.1.0-preview4-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel.Https": "1.1.0",
    "Microsoft.AspNetCore.Session": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.1.0",
    "Microsoft.Extensions.Caching.SqlServer": "1.0.0",
    "Microsoft.Extensions.Configuration.Abstractions": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.Graph": "1.1.1",
    "Microsoft.IdentityModel.Clients.ActiveDirectory": "3.13.6"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.1.0-preview4-final",
      "imports": "portable-net45+win8+dotnet5.6"
    },
    "Microsoft.Extensions.Caching.SqlConfig.Tools": "1.1.0-preview4-final"
  },

  "frameworks": {
    "netcoreapp1.1": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ],
      "dependencies": {
        "Microsoft.NETCore.App": {
          "version": "1.1.0",
          "type": "platform"
        }
      }
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "views/**/*.cshtml",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "bower install", "gulp buildprod" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

答案 4 :(得分:1)

就我而言,这 HTTP Error 502.5 发生在我克隆了一些非常旧的 git 存储库时,其中包含面向 .NET Core 1.1 的 Web 项目......前一段时间我从我的 Windows 机器上卸载了 .NET Core 1.1 运行时。

所以我去下载了运行时并重新安装了它。从 this page 获得最新版本,即 1.1.13:

https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-1.1.13-windows-x64-installer

现在一切都很好。回去工作。 :-)

答案 5 :(得分:1)

对我来说,解决方案只是安装.Net Core 2.2 SDK,它就可以了。

https://dotnet.microsoft.com/download

答案 6 :(得分:1)

我有一个类似的问题。我只是按照故障排除步骤进行操作:     Check the system event log for error messages并从事件查看器Application 'MACHINE/WEBROOT/APPHOST/[MyFolder]' with physical root 'C:\inetpub\wwwroot\[MyFolder]\' failed to start process with commandline 'dotnet .\MyApp.dll', ErrorCode = '0x80004005 : 80008083.

中找到以下内容

然后我从终端重新运行dotnet .\MyApp.dll并得到了答案:

It was not possible to find any compatible framework version
The specified framework 'Microsoft.AspNetCore.App', version '2.1.1' was not found.
  - Check application dependencies and target a framework version installed at:
      \
  - Alternatively, install the framework version '2.1.1'.

所以原因与jv_回答的相同,只是您没有安装兼容的框架版本。我最终使用了“自包含”部署模式,并且有效。

答案 7 :(得分:1)

我的项目在开发中运行良好,但在Web部署/发布到生产之后,它正在抛出502.5 Process Failure

原因是我已使用Microsoft.AspNetCore.All 2.0.5更新为2.0.6。恢复版本后工作正常。

答案 8 :(得分:1)

我在使用Visual Studio转换web.config文件并更改processPath和参数时遇到了同样的问题。如Microsoft site所述,您可以在project.csproj文件中添加排除项:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

这已经解决了我在更改发布路径值时遇到的问题,但我仍然遇到问题,但Visual Studio在调试时会自行更改它。

答案 9 :(得分:0)

问题:当我部署ASP Net Core Web API时,processPath设置为dotnet。该应用无法启动,事件查看器显示上述错误。

解决方案:

应设置应用程序池标识以加载配置文件。

导航到:应用程序池-> NetCore(您的池)->高级设置->加载用户配置文件---->将此设置为true

我验证了将其设置为false会重新创建错误并将其设置为true可以解决该问题。

答案 10 :(得分:0)

除了我在开发环境中更新了Visual Studio,并且服务器需要更新.NetCore运行时外,我遇到了同样的问题。一旦我更新了服务器上的运行时,就可以再次运行。

我想我对VS 2017更新的经验不足是我的问题;-)

答案 11 :(得分:0)

我希望能够从开发目录中的IIS运行基于.Net Core的API,而无需与web.config文件进行斗争。 Visual Studio根据项目配置文件设置来控制web.config。您只需要将IIS配置文件添加到调试开始,以便VS知道如何处理web.config。说明在这里:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/development-time-iis-support?view=aspnetcore-2.2

现在,我可以编写一些代码,编译和刷新浏览器,而无需等待浏览器启动,并且每次都不会丢失查询字符串。单击“调试”会自动将VS附加到IIS进行调试,这意味着不再需要手动将调试器附加到w3wp,这使我厌烦了很长时间。完美!

作为参考,VS正在将我的web.config动态更改为此:

<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
  <environmentVariables />

但是,我不会将其硬编码到web.config中,而只是让VS管理它。 :)

答案 12 :(得分:0)

对我来说,一段时间后,我了解到该问题与

中的一个属性有关
  

appsettings.json

文件。
我有一个名为Version的属性。格式如下:

Bounded

在服务器上,我们的支持团队没有考虑这种格式,而是这样的:

"Version": "1.0.6",

并且IIS遇到502.5错误。
我可以看到应用程序事件日志,它对我有帮助。

答案 13 :(得分:0)

考虑到我已经尝试了所有可能在网上找到的修复程序,但是这对我没有任何帮助,这完全使我发疯。直到发现问题为止,我的项目名称中有一个空格:App WebAPI.dll。因此,当“ dotnet。\ App WebAPI.dll”尝试执行时失败,因为它实际上是在尝试执行“ dotnet。\ App”,而忘记了空格后面的第二部分。重命名我的解决方案和项目名称以删除空格(AppWebAPI)解决了我的问题。我希望此修复程序可以节省人们尝试找出问题的时间。

答案 14 :(得分:0)

当我工作的团队遇到这个问题时,有人用Visual Studio构建项目并压缩了bin文件夹。

您需要运行dotnet publish命令,以便msbuild任务将正确构建您的web.config文件。它应该替换%LAUNCHER_PATH%”和“%LAUNCHER_ARGS%”变量。

答案 15 :(得分:0)

我遇到了同样的问题,这个线程对我没有任何帮助。因此,我查看了Windows Event Viewer,发现该用户没有足够的权限来创建/修改数据库,因为我正在使用EF核心数据库迁移。修复授权可以解决此问题。

因此,我建议您检查一下应用程序事件,并希望在那里能够找到导致错误的根本原因。

答案 16 :(得分:0)

有时是由于程序集名称或命名空间名称中的空格所致。

尝试避免空格

转到项目>> [项目]属性>> {应用程序标签} 更改程序集名称和默认命名空间名称,删除空间!

答案 17 :(得分:0)

回复部分用户提到应用名称或路径问题:

我在使用“WebApp-OpenIDConnect-DotNet”示例项目 (enter image description here) 时遇到了这个问题,该项目在 IIS Express 中运行良好,但在 IIS 中运行良好。

事实证明,从深入到 https://github.com/AzureADQuickStarts/WebApp-OpenIdConnect-DotNet 处的 .NET 源代码开始,因为程序集名称以“-DotNet.exe”(或者可能只是 DotNet.exe)结尾,所以它正在沿着这条路走下去假设它应该作为一个独立的应用程序运行。因此,有关缺少参数的投诉。在从 Windows 事件日志中搜索错误字符串将我带到源文件之前,我为此纠结了很长时间。

更改程序集名称使其不以“-DotNet.exe”结尾为我解决了问题。

我应该补充一点,我实际上得到的是 500.30 错误而不是 500.5。但是这个线程让我最接近解决问题,所以我在这里发布我的解决方案。

希望对某人有所帮助。

答案 18 :(得分:0)

哦,伙计们,我的网站也运行良好,突然间它开始显示此错误。我的网站是在 go daddy 下托管的。他们的技术团队也无能为力找出确切的问题。我尝试了上面的所有评论,但没有一个工作正常。所以在花了很多时间解决之后,

我在 web.config 中保留了 processPath,就像 processPath="dotnet" 一样,就在显示此错误之前,我对我的 appsettings.json 文件进行了一些更改更新我的连接字符串。我在本地机器上使用 filezilla(使用查看/编辑选项)对其进行了编辑。所以我猜它可能被损坏了,这也导致了这个问题。

所以我所做的是,我再次在本地发布了我的项目,并在我的 appsettings.json 中本地更新了我的连接字符串,并将此最新更改部署到了 Godaddy。在这次部署之后,我的网站又开始出现了。