c# - 在 Windows 服务中托管 ASP.NET 5 Web 应用程序

标签 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 文件。

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

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

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

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

最佳答案

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

关于c# - 在 Windows 服务中托管 ASP.NET 5 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755774/

相关文章:

c# - 重置密码时出现 "Invalid token"错误,ASP.Net Identity 2.2.0

c# - 在 C# 中使用 XML 模板的 PDFSharp

.net - .Net 中的 IOrderedEnumerable.ThenBy() 如何工作?

c# - 如何逐行读取 StreamReader 文本

c# - 为什么多次调用 app.UseEndpoints(..) 时中间件不执行?

c# - 如何使内联数组初始化像例如字典初始化?

c# - 如何将数据从行合并到列

c# - 动态构建 webapi odata 模型

c# - asp.net core authorization - 操作授权处理程序

c# - 如何将虚拟路径映射到物理路径?