【问题标题】:.Net Core module not started from IIS, only from command line.Net Core 模块不是从 IIS 启动的,只能从命令行启动
【发布时间】:2020-12-19 13:14:15
【问题描述】:

我正在通过在 Windows 10 上运行的 IIS 部署 .Net 应用程序。Web.config 已正确处理,IIS 未报告任何问题。但是 aspnetcore 模块未启动,我无法浏览该站点。 如果我从命令行运行 dotnet dllname,那么我的网站可以正常工作。这是一个令人沮丧的尝试。 IIS 日志没有提供任何线索来说明 IIS 为何无法像 dotnet 从命令行那样启动站点。尝试启用 aspnetcore 增强跟踪不会做任何事情。这是我的 web.config:

<configuration>
 <location path="." inheritInChildApplications="false">
   <system.webServer>
     <handlers>
       <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
     </handlers>
     <aspNetCore processPath="c:\Program Files\dotnet\dotnet.exe" arguments="c:\escompdata2\ESTemplateCompData.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" >
       <handlerSettings>
         <handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
         <handlerSetting name="debugLevel" value="FILE,TRACE" />
      </handlerSettings>
     </aspNetCore>
   </system.webServer>
 </location>
   <system.webServer>
       <rewrite>
           <rules>
               <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                   <match url="(.*)" />
                   <action type="Rewrite" url="http://escompdata:5000/{R:1}" />
               </rule>
           </rules>
       </rewrite>
   </system.webServer>
</configuration>

我的应用程序池确实具有适当的权限。我正在使用具有正确凭据的管理员 ID。这是应用程序池基本设置的屏幕截图

这是高级设置的截图 我正在为我的站点设置反向代理,当从命令行启动 dotnet 应用程序时,IIS 运行良好,这似乎表明该站点至少在 IIS 中设置正确。

问题在于 IIS 似乎无法通过 dotnet 或应用程序可执行文件启动应用程序。我没有尝试过使用 Kestrel 服务器的 out 或 process 模式,但这是一个令人费解的部分。 IIS 似乎无法通过日志提供任何线索。任何帮助将不胜感激。

【问题讨论】:

  • 运行报告以揭示更多信息,docs.jexusmanager.com/tutorials/ancm-diagnostics.html
  • 如何确认aspnetcore模块无法启动?浏览器或iis中是否有错误信息?
  • 我更新了 web.config,我通过 IIS 设置代理信息重新启动服务器并浏览到该站点我收到错误 502.3 Bad Gateway
  • 我已经确定 IIS 没有使用 dotnet 启动模块。首先,当我列出机器上运行的所有进程时,不包括 dotnet,因为当我使用项目 dll 从命令行运行 dotnet 时。其次,应用程序应该监听 localhost:5000。当我浏览到该链接时,它会失败,这表明没有人在那儿听。这应该是一个简单的问题。不幸的是,我不知道根本原因是什么。
  • 首先你要确认是什么原因导致这个错误,你可以试试我下面提到的方法。

标签: .net windows iis web-config asp.net-core-3.1


【解决方案1】:

IIS 需要安装适当的托管包才能托管您的 .Net Core 应用程序。例如,如果您有一个 .Net Core 3.1 应用程序,则需要安装 .Net Core 3.1 托管包。 IIS 不支持开箱即用地执行 .Net Core 应用程序。该参考资料应该可以帮助您入门。

Host ASP.NET Core on Windows with IIS.

【讨论】:

  • 谢谢@FrankJames。我确实立即安装了托管包。这应该很容易,你告诉 IIS 可执行文件,它会生成它。托管 NodeJS 应用程序并使用 iisnode 模块时,我遇到了同样的问题。我正在做一些事情,阻止 IIS 启动相应的模块,但无法弄清楚它是什么。与 dotnet 一样,我可以从命令行启动节点,并且 IIS 代理将请求转发到服务器而没有问题。
【解决方案2】:

502.3 Bad Gateway 错误的原因有很多。您需要做的第一件事是确定导致错误的原因。

此链接提供解决 502.3 错误的步骤:Troubleshooting 502 Errors in ARR

【讨论】:

    【解决方案3】:

    我给微软打了电话,他们告诉我发生了什么事。我告诉 IIS 代理到 localhost:5000,这是应用程序在命令行中使用 dotnet 命令启动时所听的内容。但是,当 IIS 启动应用程序时,它不使用该端口。关键是告诉 IIS 将应用程序绑定到端口 80,这与我告诉它的 5000 不同,并在 URL 重写部分将操作设置为无。这让我可以浏览到应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2011-10-30
      • 2016-07-10
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多