ASP.NET .NET Core 上的 Core 遵循控制台应用程序模型还是 IIS 托管模型?

Does ASP.NET Core on .NET Core follow the console app model, or the IIS hosting model?

目前我维护一个 运行 作为 Windows 服务的应用程序,从消息队列服务器读取消息,处理它们并将结果放回消息队列服务器。但它还包含一个可通过网络访问的健康监控组件 API。 它作为控制台应用程序实现,使用 Katana 自托管健康监控子系统。

我现在想弄清楚我们是否可以将其移至 .NET Core 和 ASP.NET Core,一旦他们进行 RTM。我知道 Windows 服务部分无法移植,但我也可以 运行 控制台应用程序作为一个分离的 Docker 容器来实现基本相同的功能,就主要功能而言。 但健康监测将如何运作?据我所知,Katana 项目已更新为 ASP.NET 5(我猜在大重命名之前是 ASP.NET Core 1),但它在 .NET Core 上没有 运行 CLR。 Katana 将需要完整的 CLR。所以这意味着 Katana 出局了。

这是否意味着我们构建应用程序的方式无法通过 .NET Core 实现?或者通过 Kestrel 托管应用程序不排除在第一次请求之前 运行ning 代码的可能性?使用 IIS,应用程序直到第一个请求才会生效(除非您使用自动启动,但它更多的是速度优化,而不是让应用程序像 "allways-running-app" 一样运行)并且通常应用程序是基于请求的并且不连续 运行ning。 IIS 托管应用程序中的后台线程是一个非常糟糕的主意。 这与红隼一样吗?或者 DNX 会启动您的应用程序并保持 运行ning 直到它关闭,就像控制台应用程序一样,这样我们就可以 运行 我们想要的所有后台线程?

它遵循控制台应用模型。武士刀实际上更像是红隼的精神前身。通过普通方法调用从 Main 方法为普通 ASP.NET 核心项目调用它。有无数教程如何在 RC1 中设置服务器(参见 Startup.cs Main 方法)和一些用于即将到来的 RC2(有一个构建器)。这将允许您在控制台应用程序中同时执行您的应用程序代码和基于 Web api 的监控。 Kestrel 和 DNX 根本不是像 IIS 这样的应用程序服务器。 Kestrel 是一个普通的 HTTP 服务器库,仅此而已。你启动它,它会从那一刻开始收听。

然而,您必须将基于 WebApi 2 和 Katana 的应用程序调整为新的 ASP.NET 核心接口和中间件概念。但与您的消息队列适配相比,这应该很容易。