托管ASP.Windows服务中的NET5 Web应用程序

本文关键字:NET5 Web 应用程序 ASP Windows 服务 托管 | 更新日期: 2023-09-27 18:05:53

我有一个现有的Windows Service应用程序,基于。net Framework 4.5,想添加一个用于配置和诊断的用户界面。

在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类库(Packages).

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

总结一下,有什么计划来支持我的第一个想法吗?还是我必须从中选择一个?哪个选项可能是最好的呢?

托管ASP.Windows服务中的NET5 Web应用程序

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

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

ASP。你运气不好,因为它只运行在DNX上(看看MVC6 nuget包中的依赖关系,它们只引用了DNX和DNXCore),并且没有针对DNX的windows服务引导程序。此外,将。net 4.6部署到生产环境中也不是一个好主意。

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

然而,你不需要对你现有的库做任何事情;它们应该在新版本的框架中运行。例如,我有一个基于2.0版本构建的大型库集合,它们在4.5版本中没有变化地运行。我所知道的唯一可能破坏你的东西是,如果他们使用的函数在新框架中表现不同。到目前为止,我的库中还没有出现这样的情况。