IIS错误502.5上的ASP.NET Core 1.0


112

我刚刚将服务器(Windows 2012R2).Net Core 1.0 RTM从上一个更新为Windows Hosting Pack .Net Core 1.0 RC2。我的应用程序可以在PC上正常运行,但服务器始终显示:

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版本一起使用。不知道会出什么问题。

这就是事件查看器说的所有内容:

Failed to start process with the commandline 'dotnet .\MyWebApp.dll'. Error code = '0x80004005'.

最糟糕的是,应用程序日志为空!我的意思是那些stdout_xxxxxxxxx.log文件完全为空,并且所有字节均为0。

我该怎么办??未记录错误时如何知道错误原因?



3
有什么关系?错误代码明显不同。更不用说我说它可以在我自己的带有IIS的PC上运行的事实。
Vahid Amiri

1
首先,我说可能相关,因为提到了这一点Failed to start process with commandline 'dotnet ./bin/Debug/netcoreapp1.0/WebApplication2.dll', Error Code = '0x80004005'.-您报告的相同命令行和错误代码。其次,仅因为它在您的计算机上运行,​​而不是在远程计算机上运行,​​则表明服务器上的某些内容有所不同。如果您可以扩展应用程序如何部署到服务器的方式,那将很有帮助。
布伦丹·格林

您的应用程序在PC上工作是什么意思。您的项目已部署到iis?我黑麦吗?
Vijunav Vastivch '16

1
@ VSG24您看到过asp.net文档的这一部分吗?发布到IIS时,它列出了常见错误,并列出了导致502.5错误的一些原因。
哈米德·莫萨拉

Answers:


112

我可以通过运行来修复它

“ C:\ Program Files \ dotnet \ dotnet.exe”“ C:\ fullpath \ PROJECT.dll”

在命令提示符下,这给了我一个更有意义的错误:

“未找到指定的框架'Microsoft.NETCore.App'版本'1.0.1。-检查应用程序依存关系并将目标框架版本安装在:C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App-安装了以下版本:1.0.0-或者,安装框架版本“ 1.0.1”。

如您所见,我的服务器上安装了错误的NET Core版本。卸载先前的1.0.0版并安装了正确的1.0.1版之后,我能够运行我的应用程序。


2
我设法使用它来发现我需要安装NodeJS ...因为它确实给出了“更有意义的消息”。
蒂姆·哈克

我不能告诉你我浪费了多少时间。谢谢。我的错误与证书丢失有关。为什么我无法通过某些理智的方法得到此错误?
斯普拉(Sprague)

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 /运行时修复了此错误。
Mike Bovenlander

68

我遇到了同样的问题,在我的情况下,我的应用程序池的用户身份权限不足,在asp.net doc的发布到IIS页面上,此错误列出了两个原因:

  • 如果你发表了独立的应用程序,请确认你没有设定一个平台buildOptionsproject.json使用发布RID的冲突。例如,不要指定x86平台,而发布RID为win81-x64(dotnet publish -c Release -r win81-x64)。该项目将在没有警告或错误的情况下发布,但由于服务器上的上述记录的异常而失败。
  • 检查web.config中元素的processPath属性,<aspNetCore>以确认该属性dotnet用于便携式应用程序,或..my_application.exe用于独立应用程序。
  • 对于便携式应用程序,dotnet.exe可能无法通过PATH设置进行访问。确认C:\Program Files\dotnet\系统路径设置中存在。
  • 对于便携式应用程序,dotnet.exe可能无法通过应用程序池的用户身份访问。确认AppPool用户身份有权访问该C:\Program Files\dotnet目录。
  • 通过调用.UseIISIntegration()应用程序的方法,确认您已正确引用了IIS集成中间件WebHostBuilder()
  • 如果在使用.UseUrls()Kestrel自托管时使用.UseIISIntegration()扩展方法,请在上将其定位在扩展方法之前WebHostBuilder()。在IIS后面运行Kestrel时,.UseIISIntegration()必须Url为反向代理设置,并且其值不会被覆盖.UseUrls()

就我而言,这是第四个原因,我通过右键单击应用程序池进行了更改,然后在“流程模型”下的高级设置中,将“身份”设置为具有足够权限的用户: 我的应用程序池的用户身份


1
这就是我一直在寻找!在我的情况下,它是应用程序池太应答....
阿曼多·拉米雷斯

3
谢谢。就我而言,问题在于通往dotnet的路径。在系统“事件查看器”中找到了此类日志:Failed to start process with commandline '"dotnet" .\PROJECT.dll', ErrorCode = '0x80070002'
0x49D1'9

我还要添加另一个原因:“安装程序无法获得VC ++可再发行组件”,因为我的服务器没有Internet连接,因此无法下载此软件包...因此,您必须手动下载它:链接并安装它。
Paco Mendez's

4
dotnet在我的路径上,但是需要重新启动服务器才能识别它。
丹尼·卡伦

在我的情况下,如果我提供--framework选项,则必须在publish命令中指定--runtime值,否则不要提供--framework,并且默认情况下它会确定运行时。
Gomes

65

我通过IIS的硬重置来完成此工作(我只是刚刚安装了主机程序包)。

事实证明,仅在IIS管理器中按“重新启动”是不够的。我只需要打开命令提示符并键入“ iisreset”


我还按了UI中Web服务器根节点上的绿色回收iis。这为我解决了该问题,并为应用程序池设置了用户设置,以LocalSystem
JP Hellemons

谢谢迈克尔...这也解决了我的问题。一直在寻找答案几个小时。谢谢!
birwin '16

2
Tx!您的回答使我想起了ms docs:“重新启动系统或执行net stop是/ y,然后在命令提示符下执行net start w3svc以选择对系统PATH的更改。” (安装.NET Core Windows Server Hosting捆绑包之后)
Quinton Smith

也解决了我的问题。谢谢
Met-u

为我工作。谢谢:)
侯赛因·沙伯(Husnain Shabbir)

11

所以我有了新服务器,这次是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来自Universal C Runtime,该文件包含在Visual Studio 2015Visual C ++可再发行组件中

我尝试安装该软件包(x64和x86),但每次在Windows Server 2012 R2上都失败(不知道为什么)。

但是,当我尝试将它们安装在新服务器Windows Server 2008 R2中时,它们已成功安装。这可能是其背后的原因,但仍不能确定。


5

发布网络应用程序时遇到了同样的问题。如果仍然有人通过更改{AppName} .runtimeconfig.json来解决此问题

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

将版本从“版本”:“ 1.1.2”更改为“版本”:“ 1.1.1”,并且一切正常


5

我有同样的问题。

为了找到确切的来源,我打开了登录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
IMO,您应该从“ true”值中删除星号,以免造成混淆。
AperioOculus '18

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框架是否已安装在服务器上,事实证明并非如此。我安装了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)。
罗德里戈·皮雷斯

1
在我的情况,我不得不改变processPath="dotnet"processPath="C:\Program Files\dotnet\dotnet.exe"。然后它起作用了。
vaheeds '18

3

当我将开发机更新到Core 1.0.1时,我遇到了同样的问题,但是却忘记了更新服务器。


对我来说,我从这里重新安装了net core SDK:microsoft.com/net/core#windows, 然后它起作用了。
让·吉恩(Jean)

1
VS2017现在默认为.NET Core 1.1-在将升级的projs发布到IIS之前,需要更新所有远程服务器。您可以获取更有用的错误消息(“未安装.NET core 1.1”)但正在运行dotnet .\YOURPROJDLL.dll
Coruscate5

3

尝试将.NET Core 2.0 API发布到AWS EB时遇到HTTP错误502.5,并通过将以下代码添加到.csproj来解决了该问题:

  <PropertyGroup>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  </PropertyGroup>

2

我有同样的问题。我将应用程序池标识更改为网络服务帐户。然后,我按照@danielyewright在他的github评论中所说的那样,在web.config中显式地将路径设置为dotnet.exe,以使应用程序正常运行。设置路径后即可使用。

谢谢


2

在我的情况下分享这个错误是因为我忘了用以下方式更新project.json

"buildOptions": {
    "emitEntryPoint": true
  }

2

我有同样的问题,与VSG24在建议的答案中描述的问题相同-在CMD中键入'dotnet'时出现讨厌的错误消息:

该程序无法启动,因为缺少api-ms-win-crt-runtime-l1-1-0.dll

我通过在Windows Server 2012 R2上手动安装以下2个更新(以及先决条件和所有其他更新链接-仔细阅读Microsoft网站上的安装说明)来解决此问题:

  1. KB2919355
  2. KB2999226

希望这对某人有帮助。


2

当我尝试发布Web应用程序的调试版本时,我遇到了同样的问题。这组文件不包含web.config具有适当值attribute 的文件processPath

我从发行版中获取了此文件,将值分配给了我的exe文件的路径。

<aspNetCore processPath=".\My.Web.App.exe" ... />

2

就我而言,是服务器上安装的Net Core版本有问题。我只是在开发机器上安装了相同的版本,所以一切都OK :-)



2

我通过向站点的应用程序添加“编辑权限”,映射到物理目录然后选择可以访问该根文件夹的Windows用户来解决此问题。(专用网络)。


2

就我而言,在安装AspNetCore.2.0.6.RuntimePackageStore_x64.exe和之后DotNetCore.2.0.6-WindowsHosting.exe,我需要重新启动服务器以使其正常运行,而不会出现502错误的网关和代理错误。

更新:

有一种无需重启即可使用的方法:https : //stackoverflow.com/a/50808634/3634867


2

使用管理员凭据打开命令提示符

输入以下命令并按Enter

> IIS重置

要么

使用管理员凭据打开Visual Studio 2017

Package Manager控制台中键入以下命令,然后按Enter

PM > IIS重置

PM> IISRESET
Attempting stop...
Internet services successfully stopped
Attempting start...
Internet services successfully restarted

2

对我来说,这是由于安装了不同版本的.Net Core引起的。我匹配了我的开发和生产服务器,它正常工作。


1

我也有这个问题(在VS 15和17上都发生了错误)。但是在VS15上它返回了一个CONNECTION_REFUSED错误,在VS17上它返回了ASP.NET Core 1.0 on IIS error 502.5

固定

  1. 导航到您的项目目录,然后找到隐藏的文件夹.vs(位于项目文件夹dir中)。(记住要显示隐藏的文件/文件夹)

  2. 关闭VS

  3. 删除.vs-folder
  4. 以管理员身份启动VS(.vs-folder将由VS重新创建)

1

这就是我的想法,这是最近在Windows 10上安装更新后发生的。从我收集到的信息中,安装了一个Windows Defender更新,该更新假定我的“ Project.dll”(一个asp.net核心项目)的行为像病毒一样,因此将其删除。

因此,在开始安装/卸载东西之前,我建议您做的第一件事是检查并确认“ Project.dll”在正确的位置。

如果不再存在,请将其复制回该位置。

如果您在复制文件时遇到困难,请将排除项添加到Windows Defender中的项目文件夹中。(在这里学习如何做。)

这对我立即起作用,并且我在多个服务器的应用程序中重复了这一步骤。


1

对我而言,Startup.cs中的connectionString在以下情况下为空:

services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

它为null,因为应用程序没有在appsettings.json中寻找连接字符串。

必须将Program.cs更改为:

public static void Main(string[] args)
{
    BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) =>
     WebHost.CreateDefaultBuilder(args)
     .ConfigureAppConfiguration((context, builder) => builder.SetBasePath(context.HostingEnvironment.ContentRootPath)
     .AddJsonFile("appsettings.json").Build())
     .UseStartup<Startup>().Build();

1

我不知道为什么这个工作对我来说,但我使用Windows身份验证,我不得不对我的这段代码BuildWebHostProgram.cs

.UseStartup<Startup>()
.UseHttpSys(options =>
{
    options.Authentication.Schemes =
        AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate;
    options.Authentication.AllowAnonymous = false;
})
.Build();

删除该.UserHttpSys位后,它现在可以工作了,我仍然可以作为域用户进行身份验证。

BuildWebHost 现在看起来像

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .Build();

我在aspnet核心中具有cookie身份验证。我该如何配置?
kudlatiger

@kudlatiger对不起,我不确定-您最好的选择是提出一个单独的问题
Bassie

1

我遇到了同样的错误,发现问题是在发布到Azure的过程中,我的web.config文件被修改,因此以下行最终如下所示:

<aspNetCore processPath="bin\IISSupport\VSIISExeLauncher.exe" arguments="-argFile IISExeLauncherArgs.txt" forwardWindowsAuthToken="false" stdoutLogEnabled="false" startupTimeLimit="3600" requestTimeout="23:00:00" />

生产的问题在于参数的内容:“-argFile IISExeLauncherArgs.txt”

看来下一个.NET Core SDK(当前在预览中)将解决此问题,但目前,解决方法是将此块添加到.csproj文件中:

<Target Name="bug_242_workaround" AfterTargets="_TransformWebConfig">
    <Exec Command="powershell &quot;(Get-Content '$(PublishDir)Web.config').replace(' -argFile IISExeLauncherArgs.txt', '') | Set-Content '$(PublishDir)Web.config'&quot;" />
  </Target>

这将修改web.config并删除有问题的部分以进行发布。

参考:https : //github.com/aspnet/websdk/issues/242

希望能帮助到你。


添加的startupTimeLimit和requestTimeout属性似乎都是工具错误
马克G

1

更改发布配置后为我工作。

在此处输入图片说明


抱歉,我在组织中看不到图像。图像下载被阻止(在大多数组织中)。
Auguste

0

我遇到了类似的问题(Asp.Net Core 2.x),该问题是由于尝试在64位Windows服务器上的IIS中运行32位asp.net核心应用程序引起的。根本原因是,自动生成的web.config(如果您的项目未明确包含默认的asp.net核心项目不包含其中的项目)不包含dotnet可执行文件的完整路径。当您在64位计算机上安装主机捆绑包时,它将安装64位和32位版本的dotnet,但是默认情况下该路径将解析为64位,并且32位asp.net核心应用程序将无法加载。在浏览器中,您可能会看到502.5错误,并且如果您查看服务器事件日志,则可能会看到错误代码0x80004005。如果您尝试从命令提示符处运行dotnet.exe来在该服务器上加载asp.net核心应用程序dll,则可能会看到类似“ BadImageFormatException”或“

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <handlers>
                <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
            </handlers>
            <aspNetCore processPath="C:\Program Files (x86)\dotnet\dotnet.exe" arguments=".\My32BitAspNetCoreApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
       </system.webServer>
   </location>
</configuration>

0

我遇到了同样的问题,在我的案例中,原因是EF内核试图从appsettings.development.json文件读取连接字符串。我打开它,发现连接字符串已注释。

//{
//  "ConnectionStrings": {
//    "DefaultConnection": "Server=vaio;Database=Goldentaurus;Trusted_Connection=True;",
//    "IdentityConnection": "Server=vaio;Database=GTIdentity;Trusted_Connection=True;"
//  }
//}

然后我像下面这样取消提交它们,问题就解决了:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=vaio;Database=Goldentaurus;Trusted_Connection=True;",
    "IdentityConnection": "Server=vaio;Database=GTIdentity;Trusted_Connection=True;"
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.