繁体   English   中英

修改 VS 生成的 gRPC 服务器代码以运行为 Windows 服务看起来不像示例

[英]Modifying VS generated gRPC server code to run as Windows Service looks nothing like samples

我正在使用 Visual Studio 2022 创建 gRPC 服务器,并希望将其变成 Windows 服务。 我已经创建并测试了服务器,但是当我查看 web 上的示例时,它们都不像此处所示的 VS 创建的 program.cs:

using eTutorService.Services;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<eTutorServiceMain>();
app.MapGet("/", () => "Communication with gRPC must be made through a gRPC client...");
app.Run();

我发现的所有内容都将“UseWindowsService”添加到 CreateDefaultBuilder,如下所示:

Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    ...

或者

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService() // Enable running as a Windows service
.ConfigureWebHostDefaults(webBuilder =>
{
    webBuilder.UseStartup<Startup>();
});

但我找不到“CreateHostBuilder”的东西与 VS 创建的“WebApplication.CreateBuilder”代码有何关系。 CreateBuilder 不支持。UseWindowsService 和 WebApplication 不支持 CreateDefaultBuilder。

编辑:我能够像这样添加 UseWindowsService :

builder.Services.AddGrpc();
builder.Host
    .UseWindowsService(options =>
    {
        options.ServiceName = "CADE eTutor Core Service";
    });

它编译,我将它添加到 Windows 服务中,该服务名称在命令行中使用 SC,但它无法启动并出现错误 1053,“服务没有及时响应启动或控制请求”。

查看事件日志,我看到这个错误引用了 UseWindowService 行。

Changing the host configuration using WebApplicationBuilder.Host is not supported. Use WebApplication.CreateBuilder(WebApplicationOptions) instead.

所以我基本上不知道如何将 VS 创建的 gRPC 模板转化为 Windows 服务。

好吧,显然微软已经改变了服务的创建方式, https://github.com/dotnet/AspNetCore.Docs/issues/23387我在那里找到了修复。 我不能说我真的很感激为什么这是必要的,但是下面的代码可以让程序作为 Windows 服务运行:

var options = new WebApplicationOptions
{
    Args = args,
    ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};
var builder = WebApplication.CreateBuilder(options);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM