部署在iis上的asp.net核心应用程序遇到500内部服务器错误

:(糟糕.500内部服务器错误启动应用程序时出错。

当我向我的asp.net核心应用程序添加数据库function并将其部署到iis时,会出现此消息。 当我在Visual Studio中开发它时,一切都很顺利。 但部署后,出现此错误消息。

我尝试使用dotnet myapp.dll在deploy文件夹中运行我的应用程序,并发现它运行良好。 问题很可能与iis有关。 我试图将..到web.config,但它似乎没用。 实际上有什么问题,或者有没有其他方法可以查看详细的错误信息以帮助找出发生了什么?

  1. 将stdoutLogEnabled =“false”更改为true,然后检查stdoutLogFile =“。\ logs \ stdout”中的日志。 那里的错误可能会告诉你一些事情。

  2. 检查是否使用ASPNETCORE_ENVIRONMENT环境变量设置了正确的环境名称,因此请使用连接字符串等正确的设置。 默认情况下,您的计算机上有“开发”环境。

  3. 您可以使用error handling中间件来显示exception

     app.UseDeveloperExceptionPage(); 

有同样的问题。 这是帮助我的指南 。 请注意,我不想在Web服务器上安装“运行时”,而是将所有必需的文件作为独立应用程序部署。 以下是更简略forms的步骤:

  1. 在本地PC上,根据您的服务器确定要发布的版本。 我的目标是Windows Server 2008 R2,这意味着我需要发布win7-x64 。 在项目目录中打开命令提示符并运行以下命令:

    dotnet发布-c release -r win7-x64

    这将创建一个包含数百个dll的发布文件夹,一个.exe和web.config位于:bin \ Release \ netcoreapp2.0 \ publish

  2. 在IIS服务器上,转到此登录页面 。 它说.NET Core … Runtime,我不想要,但如果向下滚动,你会在Windows下看到Hosting Bundle Installer 。 点击下载并运行。

  3. 从命令提示符运行此命令重新启动系统:

    net stop was /y, then net start w3svc

  4. 将本地发布文件夹中的所有文件复制到IIS服务器上所需的应用程序文件夹中。

  5. 在服务器上,打开IIS,并像平常一样创建单独的AppPool和Application。 对于AppPool,在“基本设置”下,将.NET Framework版本更改为“ 无管理代码”(可怕,对吧?)确保IIS中的应用程序指向您想要的文件夹和正确的AppPool。

  6. 在浏览器中测试您的Web应用程序。

在我的情况下,我得到了这个,因为我实际上没有在我运行它的Windows服务器上安装最新的’DotNetCore.2.0.0-WindowsHosting.exe’所以它在我的本地机器上运行正常和错误五hundy’ing在服务器上。

我还有其他非常重要的问题来解决升级问题……如果可以的话,我建议避免使用它。

Mark333的评论解决了我的问题。

引用便于阅读:

“我正在使用Visual Studio提供的普通发布。而且,我发现使用最新版本的Hosting Bundle将解决问题。在此microsoft.com/net/download/dotnet-core/runtime-2.1上+1的3.0 RC1″

我必须安装1.1,因为我的应用程序有点旧,但Hosting Bundle修复了它。 在我的情况下,我们为我们的官方环境部署到Docker镜像,但是当我想在本地进行一些测试时,我发布它并让我的本地IIS提供它。

我在Windows 2008 R2 Standard计算机上安装了DotNetCore.2.0.5-WindowsHosting.exe ,遇到了相同的http 500错误。 记录没有帮助(生成空白日志 – 事件查看器日志是通用的ErrorCode = 0x80070002

我必须做两件事来解决我的问题:

  1. 将ApplicationPoolIdentity用户(EG:IIS APPPOOL \ AppPoolIdentityName)的读取权限授予网站目录和应用程序目录
  2. 我不得不在服务器管理器下安装IIS ASP Core(这感觉很奇怪,但它有效!)

我遇到过同样的问题。

我的问题是我的连接字符串没有在appsettings.production.json中设置

并且内部服务器错误500是模糊的错误消息。

更改stdoutLogEnabled = true对我没有任何影响,因此我没有看到有关错误的任何信息。