ASP.NET Core 1.0在IIS上出现502.5错误 - 错误代码0x80004005

114
我刚刚将我的服务器(Windows 2012R2)从之前的.NET Core 1.0 RC2更新到.NET Core 1.0 RTM Windows Hosting包。我的应用在我的电脑上可以正常运行,但是服务器一直显示:
HTTP Error 502.5 - Process Failure


Common causes of this issue:

The application process failed to start
The application process started but then stopped
The application process started but failed to listen on the configured port

之前它可以在RC2版本中正常工作,不知道出了什么问题。

事件查看器上只显示:

无法使用命令行'dotnet .\MyWebApp.dll'启动进程。错误代码='0x80004005'。

最糟糕的是应用程序日志为空!我的意思是那些stdout_xxxxxxxxx.log文件完全为空,大小都是0字节。

我该怎么办?当没有记录时,如何知道错误的原因?


可能相关?https://dev59.com/pVoU5IYBdhLWcg3wg3So - Brendan Green
3
它们有什么关联?错误代码明显不同。更不用说我说它在我的个人电脑上使用IIS可以运行。 - Vahid Amiri
1
首先,我说“可能”相关,因为提到了“无法使用命令行'dotnet ./bin/Debug/netcoreapp1.0/WebApplication2.dll'启动进程,错误代码='0x80004005'。”-这是您报告的相同命令行和错误代码。其次,仅仅因为它在您的机器上运行,但在远程机器上不运行,表明服务器上有些不同。如果您能详细说明应用程序如何部署到服务器上,那将非常有帮助。 - Brendan Green
是的。它在我的PC上的IIS上可以工作,但在服务器上却不能。 - Vahid Amiri
1
@VSG24,你看到asp.net文档中的这一部分了吗?发布到IIS,它列出了常见错误,并列出了502.5错误的几个原因。 - Hamid Mosalla
显示剩余7条评论
31个回答

115

我通过在命令提示符下运行以下命令修复了问题:

"C:\Program Files\dotnet\dotnet.exe" "C:\fullpath\PROJECT.dll"

这使我得到了一个更有意义的错误提示:

"The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found. - 检查应用程序依赖项并针对已安装的框架版本。 C:\Program Files\dotnet\shared\Microsoft.NETCore.App - 已安装以下版本: 1.0.0 - 或者,安装框架版本“1.0.1”。

正如你所看到的,我在服务器上安装了错误的NET Core版本。在卸载之前的版本1.0.0并安装正确的版本1.0.1之后,我可以成功运行我的应用程序。


2
我成功地使用了它来查找我需要安装NodeJS,因为它会给出“更有意义的消息”。 - Tim Harker
我也安装了错误的 .net core 版本,官方微软文档中用于 iis 托管的版本是 .net core 2.0,而我的项目是在 1.1.2 下构建的。旧版 .net core 可在此处获取。 - margaretkru
4
有人可以告诉我这个命令是什么吗?C:\fullpath\dotnet 是什么?它是您应用程序的路径,但是 dotnet 是什么意思?项目文件夹中没有 dotnet 文件。 - Jeremy Thompson
9
@JeremyThompson,这是dotnet.exe的路径,通常位于:C:\Program Files\dotnet\dotnet.exe。 - hatsrumandcode
1
我在更新到.NET CORE 2.1.3后遇到了这个错误,通过安装正确的.NET SDK/runtime修复了它。 - Mike Bovenlander
显示剩余3条评论

68

我曾经遇到过同样的问题,我的情况是由于应用程序池用户标识权限不足,在 asp.net 文档的 发布到 IIS 页面中列出了一些导致此错误的原因:

  • 如果您发布了一个自包含应用程序,请确认您没有在project.jsonbuildOptions中设置与发布RID冲突的平台。例如,不要指定x86平台并使用win81-x64 RID发布(dotnet publish -c Release -r win81-x64)。该项目将会在没有警告或错误的情况下发布,但在服务器上失败,并记录上述异常。
  • 检查web.config中<aspNetCore>元素上的processPath属性,以确认它是一个可移植应用程序的dotnet或自包含应用程序的.\my_application.exe。
  • 对于一个可移植应用程序,dotnet.exe可能无法通过PATH设置访问。确认C:\Program Files\dotnet\在系统PATH设置中存在。
  • 对于一个可移植应用程序,dotnet.exe可能对于应用程序池的用户身份不可访问。确认AppPool用户身份可以访问C:\Program Files\dotnet目录。
  • 确认您已正确引用了IIS集成中间件,方法是调用应用程序的WebHostBuilder().UseIISIntegration()方法。
  • 如果您在使用Kestrel进行自托管时使用了.UseUrls()扩展方法,请确认它位于WebHostBuilder()上的.UseIISIntegration()扩展方法之前。.UseIISIntegration()必须为反向代理设置Url,当运行Kestrel在IIS后面时,并且不要被.UseUrls()覆盖。
在我的情况下,是第四个原因。我通过右键单击我的应用程序池,在“进程模型”下的“高级设置”中将标识设置为具有足够权限的用户来更改它: 我应用程序池的用户标识

1
这就是我在寻找的答案!在我的情况下,问题出在应用程序池上... - Armando Ramirez
3
谢谢。在我的情况下,问题出在dotnet的路径上。在系统事件查看器中找到了这样的日志:“无法使用命令行'“dotnet”.\PROJECT.dll'启动进程,错误代码为'0x80070002'”。 - 0x49D1
我要再添加一个原因:“安装程序无法获取VC++ Redistributable”,由于我的服务器没有网络连接,因此它无法下载此软件包... 因此,您必须手动下载并安装它:链接 - Paco Mendez
4
dotnet 已经在我的路径中了,但需要重新启动服务器才能识别它。 - Danny Cullen
在我的情况下,如果我在发布命令中提供了 --framework 选项,就必须指定 --runtime 值,否则不要给出 --framework,它会默认找到运行时。 - Gomes
显示剩余2条评论

67

我通过对IIS进行硬重置才让它正常工作(我只是刚刚安装了托管包)。

结果证明,在IIS管理器中仅仅点击“重新启动”是不够的。我需要打开命令提示符并输入“iisreset”。


我还在 UI 中按下了 Web 服务器根节点处的绿色回收 IIS 按钮。这与将应用程序池的用户设置为“LocalSystem”一起解决了我的问题。 - JP Hellemons
谢谢Michael...这也解决了我的问题。我已经找了几个小时的答案了。谢谢! - birwin
2
谢谢!你的回答让我想起了微软文档中的这段话:“在安装.NET Core Windows Server Hosting捆绑包后,重新启动系统或在命令提示符下执行net stop was /y,然后执行net start w3svc以更新系统路径。” - Quinton Smith
问题解决了。谢谢。 - Met-u
对我有用。谢谢 :) - Husnain Shabbir
这解决了我的问题,我逐个在服务器上安装了所有软件,但可能没有参考。当我重新启动IIS时,它就可以工作了... Bingo。 - Ajay2707

12

我获得了一台新服务器,这次是Windows 2008R2,我的应用程序工作正常。

我不能确定旧服务器的问题是什么,但我有一个想法。

因为我之前编译应用程序时没有考虑任何平台,所以它给了我dll版本,只有在目标主机安装了.Net Core Windows Hosting包才能正常工作。在我的情况下,它被安装并且正常

当应用程序无法工作时,我决定将其编译为带有win7-x64运行时的控制台应用程序。这次,当我在服务器上运行我的应用程序的exe时,它崩溃并显示一个缺少dll的错误:

The program can't start because api-ms-win-crt-runtime-l1-1-0.dll is missing

那个dll来自于Visual Studio 2015的Visual C++ Redistributable中包含的通用C运行时。我尝试安装这个软件包(x64和x86版本都试过),但在Windows Server 2012 R2上每次都失败了(不知道为什么)。但是当我在新的服务器Windows Server 2008 R2上尝试安装它们时,它们成功安装了。可能这就是原因,但还不能确定。

6

当我发布 Web 应用时,也遇到了同样的问题。如果还有人遇到此问题,请尝试更改 {AppName}.runtimeconfig.json 文件。

    {
  "runtimeOptions": {
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "1.1.2"
    },
    "configProperties": {
      "System.GC.Server": true
    }
  }
}

将版本从"version": "1.1.2"更改为"version": "1.1.1",一切都正常工作。

6

我有同样的问题。

为了找出确切的原因,我在web.config文件中打开了日志记录:

<aspNetCore processPath="dotnet" arguments=".\MyWebService.dll" stdoutLogEnabled="**true**" stdoutLogFile=".\logs\stdout" />

在MyWebService根目录下创建了日志子文件夹。

重新启动IIS并尝试执行API时,出现了错误,缺少适当的Core Runtime。下载并安装DotNetCore.1.0.5_1.1.2-WindowsHosting后,错误消失了。


3
建议将“true”值中的星号删除,以避免任何混淆。 - AperioOculus

4

我遇到了同样的问题,所有的解决方案都没有用。我找到了这个宝石,如果能帮助其他人,我想分享一下。在安装Server 2012 R2时出现了DLL文件丢失的错误,尝试重新安装VS C++ 2015,但却出现了一个错误。解决方法如下:

似乎文件C:\ProgramData\Package Cache\...\packages\Patch\x64\Windows8.1-KB2999226-x64.msu无法被安装。打开管理员命令提示符并执行以下操作:

c:
mkdir tmp
mkdir tmp\tmp
move "C:\ProgramData\Package Cache\...\packages\Patch\x64\Windows8.1-KB2999226-x64.msu" c:\tmp
expand -F:* c:\tmp\Windows8.1-KB2999226-x64.msu c:\tmp\tmp
dism /online /add-package /packagepath:c:\tmp\tmp\Windows8.1-KB2999226-x64.cab

注意:将“...”替换为正确的文件夹名称。重新安装VS C++ 2015包。


4

我遇到了相同的问题,但是是在新发布的net core 2.0.6上。通过在生产服务器上安装net core SDK 2.0.6来解决。 - dodbrian

4

我曾经碰到过类似的问题,引用福尔摩斯的话来说:“当你排除了不可能的选项,无论多么不可思议,剩下的必定是真相”。

我检查了服务器上是否安装了我所针对的.NET框架,结果发现没有安装。我安装了4.6.2版本的.NET Framework,然后问题得以解决。


4

问题已解决 今天我在部署到AZURE时遇到了同样的问题。然后我尝试在本地IIS上进行相同的操作,得到了同样的问题。由于我是新手,对 .net CORE 不熟悉,在实际解决之前挣扎了几个小时。

在我们的解决方案中,发布到IIS后,我观察到我的web.confile文件,特别是下面这行:<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" forwardWindowsAuthToken="false" stdoutLogEnabled="false" />

在我们的部署文件夹中生成的web.config如下:<aspNetCore processPath="dotnet" arguments=".\Yodlee.dll -argFile IISExeLauncherArgs.txt" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

现在请尝试在Visual Studio解决方案中更改上述配置为<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" forwardWindowsAuthToken="false" stdoutLogEnabled="false" />

在我们的新部署文件夹中生成的web.config如下:<aspNetCore processPath="dotnet" arguments=".\Yodlee.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

这个方法解决了我的问题,希望对你有所帮助。


嘿@Agni,这对我有用,谢谢。但是,每次我尝试重新发布项目到Azure时,它都会被重建,并且web.config会自动更改回原始文件,其中包含导致问题的部分:“-argFile IISExeLauncherArgs.txt”。你找到解决方法了吗?(我正在使用asp.net core 2.0)。 - Rodrigo Pires
1
在我的情况下,我不得不将 processPath="dotnet" 更改为 processPath="C:\Program Files\dotnet\dotnet.exe"。然后它就可以工作了。 - vaheeds

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