ASP.NET IIS 错误 502.5 上的核心 1.0

ASP.NET Core 1.0 on IIS error 502.5

我刚刚将我的服务器 (Windows 2012R2) 更新为 .Net Core 1.0 RTM Windows 之前 .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。

我该怎么办??没有记录怎么知道错误原因??

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

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

在我的情况下,这是第四个原因,我通过右键单击我的应用程序池来更改它,并在进程模型下的高级设置中,我将身份设置为具有足够权限的用户:

所以我得到了一个新服务器,这次是 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 C++ Redistributable for Visual Studio 2015.

中包含的通用 C 运行时

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

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

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

我通过硬重置 IIS(我刚刚安装了托管包)使它工作。

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

我遇到了同样的问题。我将应用程序池标识更改为网络服务帐户。然后我在 web.config 中明确地将路径设置为 dotnet.exe 以使应用程序正常工作,正如@danielyewright 在他的 github 评论中所说的那样。设置路径后生效

谢谢

分享一下,在我的情况下,这个错误是因为我忘记更新 project.json 为:

"buildOptions": {
    "emitEntryPoint": true
  }

遇到了同样的问题,但所有解决方案均无效。找到这个 gem 并认为如果它对其他人有帮助我会传递。在 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 包。

我有一个类似的问题,引用夏洛克·福尔摩斯的话: "当你排除了不可能的事情后,剩下的,无论多么不可能,都一定是真相?"

我检查了我所针对的 .NET 框架是否安装在服务器上,事实证明它没有。我安装了 4.6.2 .NET Framework,它运行良好。

我可以通过 运行ning

修复它

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

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

"The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found. - Check application dependencies and target a framework version installed at: C:\Program Files\dotnet\shared\Microsoft.NETCore.App - The following versions are installed: 1.0.0 - Alternatively, install the framework version '1.0.1'.

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

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

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

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

  1. KB2919355
  2. KB2999226

希望这对某人有所帮助。

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

FIX

  1. 导航到您的项目目录并找到隐藏文件夹 .vs(它位于项目文件夹目录中)。 (记得显示隐藏files/folders)

  2. 关闭VS

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

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

我从 Release 版本中获取了这个文件,值被分配到我的 exe 文件的路径。

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

我的情况是服务器上安装的 Net Core 版本有问题。 我只安装了与我的开发机器相同的版本,一切正常:-)

我在发布网络应用程序时遇到了同样的问题。 如果有人仍然通过更改 {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"[=18] =] 一切正常

我的 VS 项目自动升级到 .NET Core 1.1.2 后,我在生产服务器上遇到了这个问题。

我只是从这里在我的生产服务器上安装了 1.1.2 .net 核心运行时:https://www.microsoft.com/net/download/core#/runtime

这就是我的想法,这是最近 Windows 10 安装更新后发生的。根据我收集到的信息,安装了一个 Windows Defender 更新,假设我的 "Project.dll"(一个 asp.net 核心项目)表现得像病毒,所以它被删除了。

所以,我建议你在开始 installing/uninstalling 之前做的第一件事就是检查 确认你的 "Project.dll" 是它应该在的地方。

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

如果您在复制文件时遇到困难,请在 windows defender 中为您的项目文件夹添加一个排除项。 ( Learn how to do that here. )

这对我来说立竿见影,我在应用程序的多台服务器上重复了它。

我遇到了同样的问题。

为了找出它的确切来源我打开了登录 web.config 文件:

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

并在 MyWebService 根文件夹中创建了日志子文件夹。

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

对我来说,Startup.cs 中的 connectionString 在

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

它为空,因为应用程序没有在 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();

我不知道为什么这对我有用,但我正在使用 Windows 身份验证并且我在 Program.cs 中的 BuildWebHost 上有这段代码:

.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();

我在尝试将我的 .NET Core 2.0 API 发布到 AWS EB 时收到 HTTP 错误 502.5,并通过将以下代码添加到 .csproj 解决了这个问题:

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

已解决 我今天 运行 在部署到 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" />

这解决了我的问题,希望对您有所帮助。

我遇到了同样的错误,发现问题是在发布到 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

希望对您有所帮助。

在我的例子中,在安装 AspNetCore.2.0.6.RuntimePackageStore_x64.exeDotNetCore.2.0.6-WindowsHosting.exe 之后,我需要 重新启动服务器 以使其在没有 502 bad gateway 和代理错误的情况下工作。

更新:

有一种方法可以在不重启的情况下使用它:

我需要安装找到的最新 .net Core 版本 here。 无需重启站点或服务器

我通过添加 "edit permission" 到站点的应用程序来解决它,映射到物理目录,然后选择可以访问该根文件夹的 windows 用户。 (专用网络)。

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

我有一个类似的问题(Asp.Net 核心 2.x),这是由于尝试 运行 IIS 中的 32 位 asp.net 核心应用程序在 64 -bit windows 服务器。根本原因是自动生成的 web.config(如果您的项目没有明确包含一个,asp.net 核心项目默认不包含)不包含 dotnet 可执行文件的完整路径。当您在 64 位机器上安装托管包时,它会安装 64 位和 32 位版本的 dotnet,但默认情况下路径将解析为 64 位并且您的 32 位 asp.net 核心应用程序将无法加载。在您的浏览器中,您可能会看到 502.5 错误,如果您查看服务器事件日志,您可能会看到错误代码 0x80004005。如果您尝试从命令提示符 运行 dotnet.exe 加载该服务器上的 asp.net 核心应用程序 dll,您可能会看到类似 "BadImageFormatException" 或 "attempt was made to load a program with an incorrect format" 的错误。对我有用的修复方法是向我的项目(和部署)添加一个 web.config,并在其中 web.config 设置 dotnet.exe.[=11 的 32 位版本的完整路径=]

<?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>

使用管理员凭据

打开命令提示符

键入以下命令并按回车键

> IISRESET

使用管理员凭据

打开Visual Studio2017

Package Manager Console 中键入以下命令,然后按回车键

PM> IISRESET

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

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

我遇到了同样的问题,我的原因是 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;"
  }
}

我为此更改了配置文件选项,它正在运行!!!

也许你应该更改这两个选项:

  1. 部署模式
  2. 目标运行时