IIS上的ASP.NET Core 1.0错误502.5

Vah*_*iri 112 c# iis windows2012 asp.net-core

我刚刚将我的服务器(Windows 2012R2)更新.Net Core 1.0 RTM为之前的Windows Hosting包.Net Core 1.0 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
Run Code Online (Sandbox Code Playgroud)

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

这是所有事件查看器说:

Failed to start process with the commandline 'dotnet .\MyWebApp.dll'. Error code = '0x80004005'.
Run Code Online (Sandbox Code Playgroud)

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

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

hat*_*ode 111

我能够通过运行来修复它

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

  • @JeremyThompson它是dotnet.exe的路径,通常位于:C:\ Program Files\dotnet\dotnet.exe (9认同)
  • 有人可以告诉我这个命令是什么吗?什么是C:\ fullpath\dotnet ?? 你的应用程序的路径,但什么是*dotnet*?项目文件夹中没有dotnet文件 (4认同)
  • 我设法使用它来发现我需要安装NodeJS ......因为它确实提供了"更有意义的消息". (2认同)

Ham*_*lla 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 Integration中间件WebHostBuilder().
  • 如果您在使用.UseUrls()Kestrel进行自托管时使用扩展方法,请确认它在.UseIISIntegration()扩展方法之前已定位WebHostBuilder()..UseIISIntegration()必须Url在IIS后面运行Kestrel时设置反向代理,而不要覆盖它的值.UseUrls().

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

  • `dotnet`在我的路径中,但需要重新启动服务器才能识别它. (4认同)
  • 谢谢.在我的情况下,问题是与dotnet的路径.在系统事件查看器中找到这样的日志:`无法使用命令行启动进程'"dotnet".\ PROJECT.dll',ErrorCode ='0x80070002'. (3认同)

小智 64

我得到了这个工作与IIS的硬重置(我刚刚安装了托管包).

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

  • TX!你的回答让我想起了ms文档"从命令提示符重新启动系统或执行**net stop is/y**后跟**net start w3svc**以获取对系统PATH的更改." (安装.NET Core Windows Server Hosting包后) (2认同)

Vah*_*iri 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
Run Code Online (Sandbox Code Playgroud)

该DLL来自Universal C Runtime,它包含在Visual Studio 2015Visual C++ Redistributable中.

我尝试安装该软件包(包括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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我有同样的问题。

为了找到确切的来源,我打开了登录web.config文件的步骤:

<aspNetCore processPath="dotnet" arguments=".\MyWebService.dll" stdoutLogEnabled="**true**" stdoutLogFile=".\logs\stdout" />
Run Code Online (Sandbox Code Playgroud)

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

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

  • IMO,您应该从“ true”值中删除星号,以免造成混淆。 (3认同)