【问题标题】:ASP.NET Core + Framework in IIS getting HTTP 404IIS 中的 ASP.NET Core + Framework 获得 HTTP 404
【发布时间】:2019-09-20 03:49:09
【问题描述】:

好的 - 这是我第一次部署 ASP.NET Core 应用程序。要记住的一个问题是,我使用的是 ASP.NET Core 2.2 并针对 Framework 版本 4.6.2(不是 .Net Core)。使用 VS2017 和 IISExpress 在我的本地机器上运行良好。

我在这里完成了 MS 概述的程序:Host ASP.NET Core on Windows with IIS 文档又长又复杂,但我想我涵盖了所有内容。它清楚地表明了一件事:面向 .NET Framework 的 ASP.NET Core 应用程序不支持进程内托管模型。所以,我知道我需要使用 Out-of-Proc。 其他几点:

  • 我将应用发布到本地文件夹,然后将其复制到服务器,没有任何更改。
  • 我在默认网站中创建了新应用并为其提供了自己的应用池 - 设置为“无托管代码”
  • Out-of-proc 是默认设置,所以我没有为此做任何特殊配置。
  • 我已确认 AspNetCoreModuleV2 出现在模块列表中。

结果

我点击的每个页面都会收到 HTTP404。我在服务器上本地运行 IE 并使用如下 URL:http://localhost/MyApp/Home/MyView

  • 应用程序池显示有 1 个应用程序正在运行。
  • 应用程序事件日志显示如下消息:应用程序 '/LM/W3SVC/2/ROOT/MyApp' 已成功启动进程 '8864' 并且进程 '8864' 正在侦听端口 '37706'。它没有显示任何错误。
  • 我尝试将 default.htm 文件添加到应用程序的根目录并直接加载静态页面(使用 http://localhost/MyApp/default.htm)。这给出了 404。如果我删除 web.config,此页面将加载。

我真的没想到部署应用会这么复杂。

谁能提供有关如何解决或解决此问题的任何指导?

更新 1:Web.config 如下。我尝试过使用和不使用 hostModel=... aspNetCore 日志显示成功启动。每次页面访问尝试都不会向日志中添加任何内容(看起来很奇怪)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--
    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      <remove name="BlockViewHandler" />
      <add name="JavaScript" path="*.js" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
      <add name="CSS" path="*.css" verb="GET,HEAD" type="System.Web.StaticFileHandler" />
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
    <aspNetCore processPath=".\My.App.Name.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess">
      <environmentVariables />
      <handlerSettings>
        <handlerSetting name="debugLevel" value="file" />
        <handlerSetting name="debugFile" value="d:\Log\MyApp.log" />
      </handlerSettings>
    </aspNetCore> 
  </system.webServer>
</configuration>
<!--ProjectGuid: ee76911e-decb-48b7-bd74-36ebfbdb22b6-->

【问题讨论】:

  • 如果你点击默认控制器@localhost/MyApp会发生什么?此外,可以发布您已部署应用的 web.config。
  • 我会使用像wireshark或fiddler这样的嗅探器并在工作机器上捕获http头。然后比较非工作机器上的标题。您有凭据问题,并且机器上的标题可能不同。例如,默认浏览器可能不同,并且代码并非旨在与不同的浏览器一起使用。可能缺少证书。 http 可能使用 1.1(块模式)而不是 1.0 流模式。
  • 如果我点击 localhost/MyApp,我也会得到 404。我会研究其他建议 - 谢谢。
  • 在进程资源管理器中,我看到 svchost.exe>w3wp.exe>My.App.Name.exe>conhost.exe 作为任务>子任务树。如果我托管进程外,我不应该在那里看到 dotnet.exe 吗?
  • @shindigo 您是否尝试过将您的 web 应用程序托管为 IIS 中的单独网站,而不是默认网站下的应用程序?

标签: c# .net asp.net-core


【解决方案1】:

解决了!我正在使用 ASPNETCORE_ENVIRONMENT 环境变量,但不知道发布过程没有将它放在 web.config 中。我将此添加到 Web.config:

<environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>

页面现在加载。

我发现的最有用的诊断程序位于此链接Troubleshoot ASP.NET Core on IIS 那里,他们建议我从命令提示符运行 My.App.Name.exe。这将创建一个 Web 进程并将其分配给一个端口,并为您提供所有控制台输出。这让我发现它实际上只工作了一半,这让我发现我错过了 Env 变量。

再次感谢您的建议...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多