【问题标题】:Hosting ASP.NET5 Web Application in Windows Service在 Windows 服务中托管 ASP.NET 5 Web 应用程序
【发布时间】:2015-07-31 21:54:38
【问题描述】:

我有一个现有的基于 .NET Framework 4.5 的 Windows 服务应用程序,并且想要添加一个用于配置和诊断的用户界面。

在 Windows 窗体或 WPF 中,服务将通过 TCP 连接(.NET Remoting 或 WCF)将其数据发送到客户端,但这需要在客户端或服务器端进行额外配置,并且还需要服务和客户端在相同的兼容性级别上,这在最坏的情况下意味着多个服务的多个客户端。

我有一个想法,即使用新的 ASP.NET5 Web 应用程序将服务和用户界面融合到一个应用程序中。 当 Windows 服务启动时,首先我想启动 Web 服务器,然后启动服务的其余部分。因此,用户可以在不安装任何其他软件的情况下与服务进行交互。 Web 应用程序和 Windows 服务应该运行在同一个 AppDomain 中,这样我就可以更改用户界面中的对象,服务可以立即使用它。

到目前为止,我已经使用了新的控制台应用程序 (dnx451) 并通过 WebHostBuilder 托管并获得了一个工作页面,但我认为这不是我正在寻找的解决方案。我得到了项目输出和一个 cmd 文件来启动服务器。

所以我的第一个问题是:是否有适用于 .NET 4.5 的 WebHostBuilder 的等效实现,以在传统的 Visual Studio 项目中运行网站?

我的第二个想法是在 IIS 中完全运行该服务,因此我将拥有一个托管现有服务功能的网页。但我不知道 IIS 中的应用程序和作为 Windows 服务的应用程序之间有什么区别。 在这种情况下,ASP.NET 4.6 是什么?因为我认为我必须将现有的库转换为新的 ASP.NET5 类库(包)。

我能想到的最后一种可能性是将 Web 应用程序发布到 IIS 并作为 Windows 服务服务并通过 WCF NamedPipes 进行通信,就像我对 WPF 或 Windows 窗体应用程序所做的那样。

总而言之,是否有计划支持我的第一个想法,或者我必须选择其他一个?哪个选项可能是最好的?

【问题讨论】:

标签: c# .net asp.net-core


【解决方案1】:

您可以使用 DNX451(不是 DNX Core)运行 ASP.NET 5 和 .NET 4.5.1,并使用 Windows 服务托管它。我在这里写了一篇关于如何做到这一点的文章:http://taskmatics.com/blog/host-asp-net-in-a-windows-service/

【讨论】:

    【解决方案2】:

    对于 .NET 4.5,您的选项是 WebAPI 2.2NancyFX,两者都在 Microsoft.Owin.SelfHost 之上运行。不幸的是,您不能自托管 MVC 5。

    对于带有 MVC 6 的 ASP.NET 5,您是 out of luck,因为它是 only runs on DNX(查看 MVC6 nuget 包中的依赖项,它们只有 DNX 和 DNXCore 的引用),并且没有DNX 的 Windows 服务引导程序。此外,将 .NET 4.6 部署到生产环境 is not a good idea(尚未)。

    【讨论】:

      【解决方案3】:

      如果您希望您的服务可以从外部世界使用,我认为这是正确的,我认为表单需要托管在 ASP.NET 中,并在 IIS 服务中运行。

      但是,您不需要对现有库做任何事情;它们应该在较新版本的框架中运行。例如,我有大量针对 2.0 版本构建的库,它们在 4.5 中运行不变。我知道的唯一可能会破坏你的事情是,如果他们使用在较新框架中表现不同的函数。到目前为止,我的图书馆还没有出现过这样的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2011-10-19
        • 2011-01-07
        • 2016-08-14
        相关资源
        最近更新 更多