IIS上的ASP.NET Core 1.0错误502.5

时间:2016-07-27 22:49:49

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

我刚刚将我的服务器(Windows 2012R2)更新为上一个.Net Core 1.0 RTM的{​​{1}} Windows主机包。我的应用程序适用于我的电脑,没有任何问题,但服务器一直显示:

.Net Core 1.0 RC2

之前曾使用过RC2版本。不知道会出现什么问题。

这是所有事件查看者都说:

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

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

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

31 个答案:

答案 0 :(得分:109)

我能够通过运行

来修复它
  

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

答案 1 :(得分:65)

我有同样的问题,在我的情况下,我的应用程序池的用户身份的权限不足,在asp.net doc的Publishing to IIS页面上,列出了这个错误的几个原因:< / p>

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

在我的情况下,这是第四个原因,我通过右键单击我的应用程序池来更改它,并且在Process Model下的高级设置中,我将Identity设置为具有足够权限的用户: user identity of my Application Pool

答案 2 :(得分:60)

我使用了IIS的硬重置(我刚刚安装了主机软件包)。

原来只需按下“重新启动”即可。在IIS管理器中是不够的。我只需要打开一个命令提示符并输入“iisreset&#39;

答案 3 :(得分:9)

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

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

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

答案 4 :(得分:4)

发布网络应用时遇到了同样的问题。 如果有人仍然遇到此问题,请修改 {AppName} .runtimeconfig.json

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

将版本从&#34;版本&#34;:&#34; 1.1.2&#34; 更改为&#34;版本&#34;:&#34; 1.1.1&#34; 和everythign工作正常

答案 5 :(得分:4)

我遇到了同样的问题。

为了找到它的确切来源,我开启了登录 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错误消失了。

答案 6 :(得分:3)

有同样的问题,所有解决方案都不起作用。发现这个宝石,并认为如果它帮助其他人我会传递。在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包之后。

答案 7 :(得分:3)

已解决我刚刚部署到 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" />

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

答案 8 :(得分:3)

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

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

答案 9 :(得分:2)

我有类似的问题,引用夏洛克·福尔摩斯的话: “当你消除了不可能的事物,无论剩下什么,无论多么不可能,都必须是真理?

我检查了我所定位的.NET框架是否安装在服务器上,事实证明它不是。我安装了4.6.2 .NET Framework,但它确实有效。

答案 10 :(得分:2)

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

答案 11 :(得分:1)

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

答案 12 :(得分:1)

在我的情况下,在安装AspNetCore.2.0.6.RuntimePackageStore_x64.exeDotNetCore.2.0.6-WindowsHosting.exe之后,我需要重新启动服务器,以使其在没有502错误网关和代理错误的情况下运行。

更新:

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

答案 13 :(得分:1)

我通过添加&#34;编辑权限&#34;解决了这个问题。到站点的应用程序,映射到物理目录,然后选择可以访问此根文件夹的Windows用户。 (私人网络)。

答案 14 :(得分:1)

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

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

答案 15 :(得分:1)

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

键入以下命令并按Enter

  

> IISRESET

OR

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

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

  

PM > IISRESET

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

答案 16 :(得分:1)

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

答案 17 :(得分:1)

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

答案 18 :(得分:1)

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

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

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

答案 19 :(得分:1)

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

  

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

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

  
      
  1. KB2919355
  2.   
  3. KB2999226
  4.   

希望这有助于某人。

答案 20 :(得分:1)

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

"buildOptions": {
    "emitEntryPoint": true
  }

答案 21 :(得分:1)

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

由于

答案 22 :(得分: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;"
  }
}

答案 23 :(得分: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”或“试图加载格式不正确的程序”之类的错误。对我有用的解决方法是将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>

答案 24 :(得分:0)

我为此更改了配置文件选项,并且可以正常使用!!!

enter image description here

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

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

答案 25 :(得分:0)

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

enter image description here

答案 26 :(得分:0)

我遇到了同样的错误,发现问题是在发布到Azure期间,我的 web.config 文件被修改,因此以下行最终结果如下:

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

生产的问题是参数的内容:&#34; -argFile IISExeLauncherArgs.txt&#34;

似乎这个问题将在下一个.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

希望它有所帮助。

答案 27 :(得分:0)

我不知道为什么这对我有用,但我使用的是Windows身份验证,我在BuildWebHost的{​​{1}}中有了这段代码:

Program.cs

删除.UseStartup<Startup>() .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.NTLM | AuthenticationSchemes.Negotiate; options.Authentication.AllowAnonymous = false; }) .Build(); 位后,它现在可以正常工作,我仍然可以作为域用户进行身份验证。

.UserHttpSys现在看起来像

BuildWebHost

答案 28 :(得分:0)

对我来说,Startup.cs中的connectionString在以下位置为null:

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

答案 29 :(得分:0)

这是我想到的,最近在安装了更新后在Windows 10上发生了这种情况。从我收集的内容中,安装了一个Windows Defender更新,假设我的&#34; Project.dll&#34;(一个asp.net核心项目)表现得像病毒,因此被删除了。

所以,在你开始安装/卸载东西之前,我建议你做的第一件事就是检查确认你的&#34; Project.dll&#34;应该是它应该在哪里。

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

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

这对我来说很有效,我在应用程序中重复了多个服务器。

答案 30 :(得分:0)

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

<强> FIX

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

  2. 关闭VS

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