【问题标题】:ASP.NET 5 IIS8 dnx failASP.NET 5 IIS8 dnx 失败
【发布时间】:2016-05-11 16:58:33
【问题描述】:

我在 IIS 中托管 ASP.NET RC1 应用程序时遇到问题。

我已经阅读了网站上的类似问题,并阅读了微软官方文档,但无济于事。我根本无法让应用程序在 IIS8 中启动,这在这种情况下是必须的,因为我需要将它与 SSL 证书一起使用,不幸的是没有显示相关日志。

应用打包在dnx-clr-win-x86.1.0.0-rc1-update2

如果我尝试在本地 VS2015 中启动它,它会完美运行。如果我从命令行在服务器机器上运行 Web.cmd,应用程序将毫无问题地启动。但是,当我尝试通过 IIS 运行它时,事件日志会捕获以下内容。

Faulting application name: dnx.exe, version: 1.0.0.20309, time stamp: 0x56e05cbb
Faulting module name: ntdll.dll, version: 6.2.9200.21815, time stamp: 0x56eaff87
Exception code: 0xc0000374
Fault offset: 0x000db583
Faulting process id: 0xae4
Faulting application start time: 0x01d1aba4b38c38e7
Faulting application path: C:\inetpub\wwwroot\approot\runtimes\dnx-clr-win-x86.1.0.0-rc1-update2\bin\dnx.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: f1f534cd-1797-11e6-9404-000d3ab185aa
Faulting package full name: 
Faulting package-relative application ID: 

在我看来,它使用了错误的 dnx 版本,但这应该是不可能的,因为我发布了应用程序:

dnu publish --runtime active --no-source

【问题讨论】:

    标签: asp.net iis iis-8 dnx


    【解决方案1】:

    首先感谢克林特将我推向正确的方向。

    不幸的是,我最终启动了一个新的 Windows Server 2012 实例,并从头开始安装所有东西,目前这似乎工作得很好。最初设置服务器时,我可能搞砸了一些东西,但这是一个测试,所以没有造成任何伤害。我对 DNX 到 IIS 发布有一些观察,这可以帮助其他有类似问题的人,或者至少缓解一些问题。

    非常重要的步骤:

    • 如果从命令行发布,请使用 dnu publish --runtime active 发布。添加 --no-source 如果您确定不需要进行任何快速更改即可使应用正常工作,以便将其编译为 NuGet 包。

    • 尝试通过从命令行运行发布文件夹中的 web.cmd 手动运行应用程序。如果这不起作用,则 IIS 是您的问题,您需要先解决应用启动问题。

    • 在您的开发机器上本地安装 IIS,并尝试使其首先与该机器一起工作,这将帮助您了解发生在您身上的问题以及如何在真正的 Web 服务器上解决这些问题。

    • 使用事件查看器 -> Windows 日志 -> 应用程序在启动期间捕获 .NET 和 HttpPlatformHandler 错误

    • 在 wwwroot/web.config 中为您的解决方案启用标准输出。

    解决不同的问题:

    1.各种 http 4xx 和 5xx 错误。

    • 确保已安装 Http Handler 1.2。如果您不确定,请检查控制面板中的添加/删除程序部分,其中版本清晰可见。如果使用 x64 系统,则需要安装 x64 运行时
    • 检查您是否在 IIS 中解锁了处理程序
    • 检查应用程序池是否设置为无托管代码(在我的情况下不需要 32 位应用程序支持)

    2.我不确定我发布到一个好的文件夹

    • 在 wwwroot 文件夹中为您的 Web 应用程序创建一个文件夹,例如C:\inetpub\wwwroot\myApplicationName
    • 将发布文件复制到该文件夹​​。结构应该如下:

      C:\inetpub\wwwroot\myApplicationName

      • approot
      • 日志
      • wwwroot
    • 在 IIS 中创建一个新网站并将其附加到设置为无托管代码的应用程序池

    • 将应用程序文件夹设置为 C:\inetpub\wwwroot\myApplicationName\wwwroot

    3.事件查看器 - DNX 无法写入日志文件夹

    这是 IIS 对来自您的发布项目的日志文件夹的权限的问题。右键单击 -> 属性 -> 日志文件夹上的安全性并为以下用户添加权限。

    IIS_IUSRS(权限:读取和执行、列出、写入

    完成此操作后,重新启动网站,并检查此问题是否消失。如果事件查看器没有记录任何内容,请检查日志文件夹中是否生成了一个文件,您应该在其中获得下一个故障排除提示。

    注意:如果您发布了应用更新,并且您不小心覆盖了日志文件夹,您将取消其权限并且此问题将再次出现。初始发布后,只需复制 approot 和 wwwroot,并保留日志原样以避免这种情况。

    4.无法加载应用程序或执行命令“Microsoft.AspNet.Server.Kestrel”。可用命令:web

    • 在手动发布之前尝试运行 dnu 恢复
    • 确保您已经发布了 --runtime active

    【讨论】:

    • 写得真好。谢谢。
    【解决方案2】:

    首先确保您已安装 httpPlatformHandler v1.2。然后按照步骤并发布解决方案here。如果它仍然不起作用,我听说有些人通过在 Startup.cs 中添加 Configure1() 方法解决了他们的问题。详情见here

    我的一个项目使用 IIS,但这很困难。所以我决定等到下一个版本。我个人认为现在不值得打扰。因为它依赖于下一个版本中将被替换的 dnx。因此,无论您为使其正常工作所做的一切,都可能在下一个版本之后不再适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多