在 WindowsService(工作服务)中托管 Web 应用程序的最佳方法

问题描述 投票:0回答:1

我的应用程序是一个Windows服务(Worker Services),我需要添加一个Web应用程序来管理和监视Windows服务的任务。

Product _______ Windows Service
        \______ WebApp

       

为了便于部署,最好只安装 Windows 服务,并且该服务本身在默认(但可配置)端口中托管 Web 应用程序。因此无需单独部署 Web 应用程序。

我使用 .net 技术和 Windows 平台(Windows 服务、Worker Services、Asp.net Core、Blazor WebApp)。您对在 .net 世界中处理此部署架构有什么建议。

.net asp.net-core deployment windows-services blazor-server-side
1个回答
0
投票

在 WindowsService 中托管 Web 应用程序的最佳方式(Worker 服务)。

我使用 .net 技术和 Windows 平台(Windows 服务、Worker 服务、Asp.net Core、Blazor WebApp)。你有什么建议 在.net世界中处理这个部署架构

虽然很难明确做出最终决定,因为它通常取决于场景和要求。尽管如此,有几种方法可以实现您想要实现的目标,因此您必须决定哪一种最适合或满足您的要求。

通常,直接在 Windows 服务(Worker Service)内托管 Web 应用程序有一些潜在的好处,但出于安全性、可维护性和可扩展性的原因,通常不建议这样做。

因此,牢记上述考虑,您可以尝试以下任一方法。

首先,流行的方法之一可能是将 ASP.NET Core 中间件集成到 Worker Service 中,因为将 ASP.NET Core 中间件集成到 Worker Service 涉及到将 Web 应用程序的中间件合并到 Worker Service 的执行管道中。

这提供了诸如更高的灵活性、精确的控制和潜在的性能改进等优势。

例如,您可以使用中间件 DI 直接注入您的工作服务。让我们考虑以下示例:

public class MyWorkerService : IHostedService
{
    private readonly IWebHost _webHost;

    public MyWorkerService(IWebHostBuilder builder)
    {
        _webHost = builder.Build();
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _webHost.StartAsync(cancellationToken);
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return _webHost.StopAsync(cancellationToken);
    }
}

最后,您可以按如下方式注册您的 DI:

builder.Services.AddHttpClient<MyWorkerService>();

但是,缺点包括更复杂的实现以及需要手动管理 HTTP 请求和响应。

注意: 此方法非常适合未暴露在公共互联网上的内部管理和监控应用程序。

您可以考虑的另一种方法是将工作服务和 Web 应用程序分开,包括在 IIS 上独立部署 Web 应用程序或使用 Kestrel 自托管。

这种方法提供了可扩展性优势,并允许为 Web 应用程序采取专门的安全措施。

但是,它也有一些缺点,包括更复杂的部署过程以及可能会增加 Worker Service 和 Web 应用程序之间的通信开销。

另一个好的方法是,分离 ASP.NET Core WebApp 或 Blazor WebAssembly 带来的优势包括清晰的关注点分离、专用的 Web 服务器功能、更容易的扩展和标准化的安全协议。

但是,这种方法需要不同的部署和管理流程。在用于多功能 Web 应用程序的 ASP.NET Core 和用于单页应用程序的 Blazor WebAssembly 之间进行选择应基于特定的项目要求和偏好。

注意: 如前所述,很难推荐任何特定的方法,因为它完全依赖于场景、要求和偏好。您可以参考这个官方文档,这样您可能会获得更多想法。

© www.soinside.com 2019 - 2024. All rights reserved.