如何将中间件添加到.net 6中的worker项目中?

Kon*_*262 2 .net c# .net-core .net-6.0

我想向我的 .net 6 工作项目添加一些运行状况检查,但我不知道如何添加。

这是我想从旧样式Startup.cs类中添加的代码

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapHealthChecks("/hc", new HealthCheckOptions()
        {
            Predicate = _ => true,
            ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
        });
        endpoints.MapHealthChecks("/liveness", new HealthCheckOptions
        {
            Predicate = r => r.Name.Contains("self")
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

在 .net 6 Web 应用程序中,您看起来会做这样的事情......

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapHealthChecks("/hc", new HealthCheckOptions()
    {
        Predicate = _ => true,
        ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
    });
    endpoints.MapHealthChecks("/liveness", new HealthCheckOptions
    {
        Predicate = r => r.Name.Contains("self")
    });
});

app.Run();
Run Code Online (Sandbox Code Playgroud)

但是WebApplication.CreateBuilder(args)在工作模板中不可用。相反,你会得到这个...

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services => { services.AddHostedService<Worker>(); })
    .Build();

await host.RunAsync();
Run Code Online (Sandbox Code Playgroud)

看起来应该是可能的,因为这里的eShopOnContainers参考应用程序中有多种方法的合并

Oma*_*jid 6

要设置上下文,如果要公开/hc端点,则需要能够侦听(并回复)/hc路径上的 HTTP 请求的东西。换句话说,我们需要向工作线程添加一个 HTTP 侦听器(.NET 术语中的 Web 主机)。

那么,让我们这样做吧。

首先,我们需要配置我们的 SDK 项目以使用 Web SDK。将您的项目类型更改为:

<Project Sdk="Microsoft.NET.Sdk.Worker">
Run Code Online (Sandbox Code Playgroud)

到:

<Project Sdk="Microsoft.NET.Sdk.Web">
Run Code Online (Sandbox Code Playgroud)

接下来,我们可以使用以下命令来代替主机WebApplication

var builder = WebApplication.CreateBuilder(args);
Run Code Online (Sandbox Code Playgroud)

然后,我们可以添加我们想要的两个服务(HealthCheck + Worker):

builder.Services.AddHealthChecks();
builder.Services.AddHostedService<Worker>();
Run Code Online (Sandbox Code Playgroud)

然后我们可以映射端点:

var app = builder.Build();
    
app.UseRouting();
app.UseEndpoints(endpoints =>
{
   endpoints.MapHealthChecks("/hc");
});
Run Code Online (Sandbox Code Playgroud)

最后运行应用程序:

app.Run();
Run Code Online (Sandbox Code Playgroud)

我发现https://learn.microsoft.com/en-us/aspnet/core/migration/50-to-60-samples?view=aspnetcore-6.0是一个很好的资源,可以了解如何将一些 3.1 样式的代码转换为 6.0样式代码。


归档时间:

查看次数:

1474 次

最近记录:

3 年,6 月 前