And*_*ens 4 .net grpc asp.net-core
我目前正在使用 gRPC,到目前为止已经创建了一个简单的 C# hello world 演示,使用 Visual StudioASP.Net Core gRPC Service
项目作为服务器和客户端控制台应用程序。
接下来我想做的是让 gRPC 服务器在 .Net 6 WPF 桌面应用程序(称为“AppA”)中运行,从而允许另一个桌面应用程序(“AppB”)向 AppA 发出信息请求。这可能吗?
通常我会使用 WCF 来实现此目的,但由于 CoreWCF 的不成熟,我被警告不要使用它。
我找到了一种在 WPF 桌面应用程序中托管 gRPC 服务的方法。
该项目需要引用“Grpc.AspNetCore”包(没有“proto”东西,稍后你会明白为什么)。
然后是启动 Web 应用程序的代码。出于演示应用程序的目的,我在 MainWindow.xaml.cs 中实现了此功能:
private WebApplication? _app;
public MainWindow()
{
InitializeComponent();
Task.Run(() => StartServer());
}
private void StartServer()
{
var builder = WebApplication.CreateBuilder();
// Despite adding a "launchSettings.json" file to the project, I couldn't find a way
// for the builder to pick it up, so had to configure the URLs here:
builder.WebHost.UseUrls("http://*:5219", "https://*:7219");
builder.Services.AddGrpc();
_app = builder.Build();
_app.MapGrpcService<TestService>();
_app.Run();
}
private void MainWindow_OnClosing(object? sender, CancelEventArgs e)
{
_app?.StopAsync();
}
Run Code Online (Sandbox Code Playgroud)
对 _app.Run() 的调用会阻塞(直到 Web 应用程序停止),这就是为什么我在 ab/g 线程上调用 StartServer() 的原因。
我发现一篇文章指出 proto 编译器在 WPF 项目中无法正常工作。尽管它正在生成类,但构建错误表明无法找到这些类。解决方案是将“protos”内容和服务类添加到类库中,然后从 WPF“服务器”引用它。类库项目需要引用以下包:
归档时间: |
|
查看次数: |
1669 次 |
最近记录: |