IIS 错误 502.5 上的 ASP.NET Core 1.0
Posted
技术标签:
【中文标题】IIS 错误 502.5 上的 ASP.NET Core 1.0【英文标题】:ASP.NET Core 1.0 on IIS error 502.5 【发布时间】: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 字节大小。
我该怎么办??未记录时如何知道错误原因??
【问题讨论】:
可能相关? ***.com/questions/37362183/… 它有什么关系?错误代码明显不同。更不用说我说它可以在我自己的带有 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 错误的几个原因。
【参考方案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.json
的buildOptions
中设置与发布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 文件,特别是在 <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)。 就我而言,我必须将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 网站上的安装说明):
KB2919355 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.exe
和 DotNetCore.2.0.6-WindowsHosting.exe
后,我需要重新启动服务器以使其在没有 502 bad gateway 和 proxy 错误的情况下正常工作。
更新:
有一种方法可以在不重新启动的情况下使用它: https://***.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
。
修复
导航到您的项目目录并找到隐藏文件夹.vs
(它位于项目文件夹目录中)。 (记得显示隐藏的文件/文件夹)
关闭VS
删除 .vs 文件夹 以管理员身份启动 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 "(Get-Content '$(PublishDir)Web.config').replace(' -argFile IISExeLauncherArgs.txt', '') | Set-Content '$(PublishDir)Web.config'"" />
</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;"
【讨论】:
以上是关于IIS 错误 502.5 上的 ASP.NET Core 1.0的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败
诊断 IIS 7 和 ASP.NET MVC 上的 404 错误
部署在 IIS 上的 ASP.NET Core 对长时间运行的请求返回 502 错误
ASP.NET 4.5 在 ASP.NET Core 2.0 应用程序下的 Azure Web App 中将 502.5 作为虚拟应用程序抛出