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

时间:2015-07-31 21:54:39

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

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

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

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

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

所以我的第一个问题是:WebVostBuilder for .NET 4.5是否有相同的实现,在传统的Visual Studio项目中运行一个网站?

我的第二个想法是在IIS中完全运行服务,所以我有一个托管现有服务功能的WebPage。但我并不知道IIS和Windows服务中的应用程序之间存在任何差异。 在这种情况下,有关ASP.NET 4.6的内容是什么?因为我认为我必须将现有的库转换为新的ASP.NET5类库(包)。

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

对于.NET 4.5,您的选项为WebAPI 2.2NancyFX,均在Microsoft.Owin.SelfHost之上运行。很遗憾,您无法自我托管MVC 5.

对于ASP.NET 5 w / MVC 6,你out of luck因为它only runs on DNX(看看MVC6 nuget包中的依赖项,他们只获得了DNX的参考资料)和DNXCore),DNX没有Windows服务引导程序。此外,将.NET 4.6部署到生产is not a good idea(尚未)。

答案 2 :(得分:0)

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

但是,您不需要对现有的库做任何事情;它们应该在更新版本的框架中运行。作为一个例子,我有一个很大的库集合,我是针对2.0版本构建的,它们在4.5中保持不变。我所知道的唯一可能会破坏你的东西的是它们是否使用在较新框架中表现不同的函数。到目前为止,我的图书馆已经出现了类似的情况。