1

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

我现在正试图弄清楚我们是否可以在 RTM 之后将其移至 .NET Core 和 ASP.NET Core。我知道 Windows 服务部分无法移植,但我也可以将控制台应用程序作为分离的 Docker 容器运行,以在主要功能方面基本上实现相同的目标。但是健康监测将如何运作?据我所知,Katana 项目已经更新到 ASP.NET 5(我猜是大改名之前的 ASP.NET Core 1),但它不能在 .NET Core CLR 上运行。Katana 将需要完整的 CLR。所以这意味着Katana已经出局了。

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

4

1 回答 1

1

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

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

于 2016-03-06T17:08:10.607 回答