【发布时间】: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