如何将针对 net452 项目的 ASP.NET Core 部署为 IIS 中网站的 IIS 应用程序

Posted

技术标签:

【中文标题】如何将针对 net452 项目的 ASP.NET Core 部署为 IIS 中网站的 IIS 应用程序【英文标题】:How to deploy an ASP.NET Core targetting net452 project as an IIS application of a Web Site in IIS 【发布时间】:2016-12-21 16:25:29 【问题描述】:

我想将针对 net452 的 ASP.NET Core RTM Web 应用程序部署到 IIS 应用程序而不是 IIS 网站。我正在使用 IIS 10(Windows 10)

我之前有一个ASP.net 5 RC1 项目,并使用here 和here 描述的方法将其部署到IIS 中的IIS 应用程序文件夹中

我需要将网站作为我的网站下的应用程序运行,例如http://locahost/mysite 在 IIS 中,我在 RC1 中通过将以下代码行添加到我的 Startup.cs 中的 Configure 方法中实现了这一点

app.Map("/MyApplication", (app1) => this.Configure1(app1, env, loggerFactory));

在我将项目转换为 ASP.net 核心后,它可以在 Visual Studio 中成功运行,但是当我访问 URL http://localhost/mysite 时,上面的代码现在只是在 IIS 中给我一个空白页

我已确保我的代码中包含我需要的所有内容,从 ASP.NET documentation website 了解如何将 ASP.NET Core 部署到 IIS,包括安装安装程序和执行 iireset

但是在完成设置所需的一切之后,我得到了相同的空白屏幕。

现在我被卡住了。

然后我启用了日志记录。当我启用登录我的web.config 时,当我尝试访问我的网站时会得到以下信息

info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
      User profile not available. Using 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\AutoGenKeys\S<removed>\DataProtection' as key repository and Windows DPAPI to encrypt keys at rest.
Hosting environment: Production
Content root path: C:\mydeployfolder
Now listening on: http://localhost:8305/mysite
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost/mysite

从上面你可以看到它捡起了我在浏览器中输入的url,并创建了一个日志条目,但是浏览器中的最终结果仍然是一个空白页面。

然后我从一开始就读取日志,由于某种原因,它正在侦听端口 8308 而不是端口 80。所以我在浏览器中输入http://localhost:8305/mysite,然后在日志中得到以下内容

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:8305/mars  
fail: Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware[0]
      'MS-ASPNETCORE-TOKEN' does not match the expected pairing token '<removed>', request rejected.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 0.9426ms 400 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:8305/favicon.ico  
fail: Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware[0]
      'MS-ASPNETCORE-TOKEN' does not match the expected pairing token '52561883-06a6-46ce-b8dc-5daadb6e83c0', request rejected.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 0.7004ms 400 

仍然是一个空白页。

我只想托管以 IIS 为目标并且之前在 ASP.NET 5 RC 中完成的 Web 应用程序。我在 ASP.NET Core 中做错了什么还是不可能了?

【问题讨论】:

launchSettings.json 中的 applicationUrl 是什么? 这是我从 Visual Studio 调试时的开发 URL localhost:49753launchUrl 是 localhost:5000 您是否检查过您的代码是否可以作为站点使用? 代码在调试和从 Visual Studio 运行的发布模式下工作。发布时什么都不做 【参考方案1】:

app.Map("/MyApplication", (app1) => this.Configure1(app1, env, loggerFactory));

ASP.NET Core RC2 或 RTM 不再需要解决方法,而 RC1 中需要解决方法

【讨论】:

以上是关于如何将针对 net452 项目的 ASP.NET Core 部署为 IIS 中网站的 IIS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core MVC 如何针对强类型模型发布未知数量的字段

在 VS 2017 中针对完整的 .net 框架 asp.net 核心项目运行 XUnit 2.2.0 单元测试时出现 System.BadImageFormatException

ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

将 DLL 引用添加到 C# asp.net 项目后如何调用函数

将 Asp.Net UserControl 用作 SharePoint WebPart

如何制作针对 ASP.NET WebAPI 进行身份验证的客户端?