尝试访问IIS 10中托管的asp.net核心应用程序时出现内部服务器错误

时间:2018-05-29 18:33:29

标签: asp.net-web-api .net-core

我使用VS2017创建一个ASP.NET核心API应用程序,只是一个简单的应用程序..我甚至没有对它进行任何更改。它能够编译得很好,能够在IIS Express中调试就好了..你知道,默认的/ api /值返回{value1,value2} ..只是默认..

我尝试在Windows 10上的IIS 10中托管它。添加了一个将.NET CLR版本设置为“无托管代码”的应用程序池,将其他所有内容保留为默认值。使用发布到文件夹的VS2017,将IIS设置为指向该文件夹,将其设置为使用端口8080.尝试使用127.0.0.1:8080/api/values和HTTP错误500.19 - 内部服务器错误在浏览器中访问它。为什么?我没做什么?

在命令提示符下,输入dotnet --info显示版本为2.1.200,.net框架显示为2.0.7。事实上,我甚至可以通过输入“dotnet .dll”直接从命令提示符运行应用程序,它将显示在端口5000上的监听,并且我能够使用浏览器访问127.0.0.1:5000/api/values和{values1,values2}将出现在浏览器中。但为什么我不能使用IIS来托管它呢?

谈到使用命令提示符使用kestrel运行应用程序时,我注意到一件奇怪的事情。在configure中设置args,我能够使用url动态更改kestrel正在侦听的端口,并且我能够使用dotnet .dll --urls http:// *:5050启用对kestrel的远程访问,例如,它工作正常..但是......当我将端口设置为6000或更高时,kestrel会说它正在侦听该端口,但是远程客户端将无法访问它。有没有遇到过这个?使用5000~5999范围内的端口工作正常..为什么?

1 个答案:

答案 0 :(得分:0)

确保以下内容:

  1. 托管服务器上安装的.NET Core Hosting Bundle - https://www.microsoft.com/net/download/all
  2. 应用程序池.NET CLR版本设置为“无托管代码”
  3. 确保Application Pool Identity用户对已发布的文件夹具有读取权限。
  4. 详细信息请查看:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.0