【发布时间】:2022-08-19 05:19:23
【问题描述】:
通过选择“ASP NET Core gRPC 服务”模板和 .Net 6 Core,我在 Visual Studio 2022 社区预览版中创建了一个 gRPC 服务器。我打算替换全部使用 WCF 的四个现有 .Net Framework Windows 服务。因此,我不是在寻找有关如何创建 Windows 服务的替代方法。
从 VS 2022 生成的代码创建了一个 program.cs(无 cmets),如下所示:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.MapGet(\"/\", () => \"Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909\");
app.Run();
我能找到的每个示例都与此 program.cs\ 的内容不匹配。此外,所有示例都包含生成的 startup.cs 文件。我的项目没有创建 startup.cs 文件。所有示例都显示,包括 NuGet 包 Microsoft.Extensions.Hosting.WindowsServices 和添加 UseWindowsServices 参数。
Host.CreateDefaultBuilder(args)
.UseWindowsService()
...
我没有 Host 或 CreateDefaultBuilder 方法。我尝试添加该行:
builder.Host.UseWindowsService();
该程序在 VS 或命令行中运行时可以完美编译和运行。我可以使用 netstat 查看端口:
netstat -an | find \"6276\"
C:\\Users\\Steve>netstat -an | find \"6276\"
TCP 127.0.0.1:6276 0.0.0.0:0 LISTENING
TCP [::1]:6276 [::]:0 LISTENING
但是当我将它作为 Windows 服务运行时,它没有在识别的端口上侦听。
netstat -an | find \"6276\"
C:\\Users\\Steve>
我尝试了 .Net 6.0 和 .Net 7.0 preview 7,在后面选中和取消选中“不要使用顶级语句”。行为没有变化。
因此,显然 Visual Studio 更改了 gRPC 的模板输出,但还没有人使用它创建 Windows 服务……或者至少没有展示它是如何完成的。
有谁知道如何获取最新的 gRPC 模板并从中创建 Windows 服务?
-
ASP.NET Core 应用程序(包括 gRPC 服务器)应该托管在 Internet 信息服务器 (IIS) 中。它将提供您需要的所有 Windows 服务基础结构,并且随 Windows 一起提供。为什么不使用 IIS?
-
来自 Microsoft:\“虽然 ASP.NET Core 6.0 应用程序可以托管在 Windows Server 上的 IIS 中,但目前无法在 IIS 中托管 gRPC 应用程序,因为某些 HTTP/2 功能不受支持\”
-
那条线几岁了?
-
不知道,但我在多个地方都见过它,而且我一直在到处寻找。还没有看到有人建议将其作为 IIS 的一部分。但我真的不希望它成为 IIS 的一部分,所以你能回答这个问题吗?
-
尝试检查
Event Viewer以查找应用程序日志。配置windows服务主机时,会自动添加EventLogs provider。您可能还想配置调试日志级别。另外,如果你想得到一个普通的Main方法,在创建项目时检查Do not use top-level statements。
标签: c# windows-services grpc