【问题标题】:ASP.NET Core 1.0 on IIS error 502.5IIS 错误 502.5 上的 ASP.NET Core 1.0
【发布时间】:2016-07-27 22:49:49
【问题描述】:

我刚刚将我的服务器 (Windows 2012R2) 从之前的 .Net Core 1.0 RC2 更新为 .Net Core 1.0 RTM Windows 主机包。我的应用在我的电脑上运行没有任何问题,但服务器一直显示:

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 字节大小。

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

【问题讨论】:

  • 它有什么关系?错误代码明显不同。更不用说我说它可以在我自己的带有 IIS 的 PC 上运行。
  • 首先,我说可能相关,因为提到Failed to start process with commandline 'dotnet ./bin/Debug/netcoreapp1.0/WebApplication2.dll', Error Code = '0x80004005'. - 您报告的命令行和错误代码相同。其次,仅仅因为它在您的机器上运行,而不是在远程机器上运行,就表明服务器上有一些不同的东西。如果您可以扩展应用程序如何部署到服务器,那将很有帮助。
  • 你的应用程序在你的电脑上运行是什么意思。你的意思是你有一个项目部署到 iis?我是ryt吗?
  • @VSG24 你看到这部分的 asp.net 文档了吗? Publishing to IIS,它列出了常见错误并列出了 502.5 错误的几个原因。

标签: c# iis asp.net-core windows2012


【解决方案1】:

我可以通过运行来修复它

"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 版本后,我能够运行我的应用程序。

【讨论】:

  • 我设法使用它来发现我需要安装 NodeJS...因为它确实给出了“更有意义的消息”。
  • 我无法告诉你我在这件事上浪费了多少时间。谢谢你。我的错误与缺少证书有关。为什么我不能通过一些理智的方法得到这个错误?
  • 谁能告诉我命令是什么?什么是 C:\fullpath\dotnet ?您的应用程序的路径,但 dotnet 是什么?项目文件夹中没有dotnet文件
  • @JeremyThompson 它是 dotnet.exe 的路径,通常位于:C:\Program Files\dotnet\dotnet.exe
  • 我刚刚在 .NET CORE 2.1.3 更新后通过安装正确的 .NET SDK/运行时修复了这个错误。
【解决方案2】:

我有同样的问题,在我的情况下,我的应用程序池的用户身份权限不足,在 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() 扩展方法之前。在 IIS 后面运行 Kestrel 时,.UseIISIntegration() 必须为反向代理设置 Url,并且其值不会被 .UseUrls() 覆盖。

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

【讨论】:

  • 这是我一直在寻找的答案!在我的情况下,它也是应用程序池......
  • 谢谢。就我而言,问题在于 dotnet 的路径。在系统事件查看器中找到这样的日志:Failed to start process with commandline '"dotnet" .\PROJECT.dll', ErrorCode = '0x80070002'.
  • 我会添加另一个原因:“安装程序无法获取 VC++ Redistributable”,因为我的服务器没有互联网连接,它无法下载这个包......因此,你必须手动下载它:@ 987654323@ 并安装它。
  • dotnet 在我的路径中,但需要重新启动服务器才能识别它。
  • 在我的情况下,如果我提供 --framework 选项,我必须在发布命令中指定 --runtime 值,否则不要提供 --framework 并且它默认计算运行时。
【解决方案3】:

我通过硬重置 IIS 来完成这项工作(我刚刚安装了托管包)。

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

【讨论】:

  • 我还在 UI 中的 webserver 根节点处按下了绿色回收 iis。结合应用程序池的用户设置到LocalSystem,这为我解决了
  • 谢谢迈克尔...这也解决了我的问题。一直在寻找答案几个小时。谢谢!
  • 发送!您的回答让我想起了 ms docs "Restart the system or execute net stop was /y 然后从命令提示符执行 net start w3svc 以获取对系统路径。” (安装 .NET Core Windows Server Hosting 包后)
  • 也解决了我的问题。谢谢
  • 为我工作。谢谢:)
【解决方案4】:

所以我有了一个新服务器,这次是 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 中的 Universal C Runtime。

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

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

【讨论】:

    【解决方案5】:

    我在发布网络应用时遇到了同样的问题。 如果有人仍然有这个问题,请通过更改 {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 后出现错误,并且缺少正确的核心运行时。下载安装 DotNetCore.1.0.5_1.1.2-WindowsHosting 后错误消失了。

      【讨论】:

      • IMO 您应该从“true”值中删除星号以避免任何混淆。
      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

        我检查了我所针对的 .NET 框架是否安装在服务器上,结果发现不是。我安装了 4.6.2 .NET Framework,它工作正常。

        【讨论】:

          【解决方案9】:

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

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

          【讨论】:

          • 我遇到了同样的问题,但使用的是新发布的 net core 2.0.6。通过在生产服务器上安装 net core SDK 2.0.6 修复
          【解决方案10】:

          已解决我今天在部署到 AZURE 时遇到了同样的问题。然后我对本地 IIS 进行了同样的尝试,遇到了同样的问题。由于我是 .net CORE 的新手,在我真正解决它之前挣扎了几个小时。

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

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

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

          在我们的新部署文件夹中,生成的 web.config 如下所示:&lt;aspNetCore processPath="dotnet" arguments=".\Yodlee.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /&gt;

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

          【讨论】:

          • 嘿@Agni,这对我有用,谢谢。但是,每次我尝试再次将项目发布到 Azure 时,它​​都会重新构建,并且 web.config 会自动更改回原始配置,其中导致问题的部分是:“-argFile IISExeLauncherArgs.txt”。你找到解决方案了吗? (我使用的是 asp.net core 2.0)。
          • 就我而言,我必须将processPath="dotnet" 更改为processPath="C:\Program Files\dotnet\dotnet.exe"。然后它起作用了。
          【解决方案11】:

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

          【讨论】:

          • 对我来说,我从这里重新安装了 net core SDK:microsoft.com/net/core#windows 然后它工作了。
          • VS2017 现在默认为 .NET Core 1.1 - 在将升级的 projs 发布到 IIS 之前,需要更新所有远程服务器。您可以获得更有用的错误消息(“.NET core 1.1 not installed”)但运行 dotnet .\YOURPROJDLL.dll
          【解决方案12】:

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

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

          【讨论】:

            【解决方案13】:

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

            谢谢

            【讨论】:

              【解决方案14】:

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

              "buildOptions": {
                  "emitEntryPoint": true
                }
              

              【讨论】:

                【解决方案15】:

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

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

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

                1. KB2919355
                2. KB2999226

                希望这对某人有所帮助。

                【讨论】:

                  【解决方案16】:

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

                  我从 Release 版本中获取此文件,值已分配给我的 exe 文件的路径。

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

                  【讨论】:

                    【解决方案17】:

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

                    【讨论】:

                      【解决方案18】:

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

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

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

                      如果您难以将文件复制回来,请在 Windows Defender 中将排除项添加到您的项目文件夹。 (Learn how to do that here.)

                      这对我很有效,我在应用程序的多个服务器上重复了它。

                      【讨论】:

                        【解决方案19】:

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

                        【讨论】:

                          【解决方案20】:

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

                          【讨论】:

                            【解决方案21】:

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

                            更新:

                            有一种方法可以在不重新启动的情况下使用它: https://stackoverflow.com/a/50808634/3634867

                            【讨论】:

                              【解决方案22】:

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

                              输入以下命令并回车

                              > IISRESET

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

                              Package Manager Console中输入以下命令并回车

                              PM> IISRESET

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

                              【讨论】:

                                【解决方案23】:

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

                                修复

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

                                2. 关闭VS

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

                                【讨论】:

                                  【解决方案24】:

                                  对我来说,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();
                                  

                                  【讨论】:

                                    【解决方案25】:

                                    我不知道为什么这对我有用,但我正在使用 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();
                                    

                                    【讨论】:

                                    • 我在 aspnet 核心中进行 cookie 身份验证。如何配置?
                                    • @kudlatiger 抱歉,我不确定 - 你最好的选择是创建一个单独的问题
                                    【解决方案26】:

                                    我遇到了同样的错误,发现问题是在发布到 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 属性似乎都是 tooling bug
                                    【解决方案27】:

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

                                    【讨论】:

                                    • 抱歉,我在我的组织中看不到图像。图片下载被阻止(在大多数组织中)。
                                    【解决方案28】:

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

                                    【讨论】:

                                      【解决方案29】:

                                      我遇到了类似的问题(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”或“尝试加载格式不正确的程序”之类的错误。对我有用的解决方法是将 web.config 添加到我的项目(和部署)中,并在该 web.config 中设置 dotnet.exe 的 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>
                                      

                                      【讨论】:

                                        【解决方案30】:

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

                                        【讨论】:

                                          猜你喜欢
                                          • 2016-12-31
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          相关资源
                                          最近更新 更多