首页 > 编程语言 >在wpf项目中实现基于Grpc.AspNetCore.Server库的grpc server功能

在wpf项目中实现基于Grpc.AspNetCore.Server库的grpc server功能

时间:2024-01-15 17:34:44浏览次数:30  
标签:项目 Grpc AspNetCore Server grpc wpf

 前言


1.

Grpc.Core库的维护到2024.10,之后应该是不再维护了,后续推荐使用Grpc.Net.Client和Grpc.AspNetCore.Server这两个库代替。
相关声明信息可以在此处看到,https://grpc.io/blog/grpc-csharp-future/


2.

当前工作的项目需求是在同一个局域网的多个wpf,通过grpc进行通讯,一个wpf作为grpc server,将数据发送给不同的wpf grpc client.

3.

新的Grpc.Net.Client与旧的Grpc.Core在Client建立方面,代码区别不大,可以直接参考msdn的文档

https://learn.microsoft.com/zh-cn/aspnet/core/grpc/basics?view=aspnetcore-8.0

// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();


4.

核心问题是,Grpc.AspNetCore.Server这个库,官方的Demo里都是基于AspNetCore这个框架实现的,没有实现宿主为wpf或者命令行项目的。
基于此,在测试了一些代码后,实现了在wpf作为宿主,实现了grpc server的功能。
主要参考了以下两篇文章
https://www.cnblogs.com/linxmouse/p/14032352.html
https://laurentkempe.com/2019/09/03/WPF-and-dotnet-Generic-Host-with-dotnet-Core-3-0/

内容

 

下面说明搭建框架流程,源码会附在文末。


1.

新建一个ASP.NET Core gRPC Service项目

(非必须的步骤,主要是为了获取appsetting.json这个文件,你自己新建一个json也没问题)


2.

新建类库项目GrpcProtoClassLibrary,用于存放****.proto协议和Grpc.Tools编译的文件。
需要安装的Nuget包如图,核心库是Grpc.Tools,帮助我们自动编译生成Client和Server类,其中Grpc.Core.Api和Google.Protobuf是编译时以来的类库。


对于Test.proto文件的属性配置,因为proto文件位于单独的类库项目,Client项目和Server项目都会引用这个类库项目,所以gRPC Stub Classes属性中选择Client and Server。


3. 新建wpf项目,作为grpc client。
添加引用GrpcProtoClassLibrary项目(proto所在的类库),Nuget中添加了Grpc.Net.Client库,还有CommunityToolkit.Mvvm作为mvvm框架。


4.新建wpf项目,作为grpc server。


此处简单说一下,
1.添加GrpcProtoClassLibrary项目引用
2.添加Nuget包,Grpc.AspNetCore.Server
3.TestBiz是用来重写GrpcServer的业务逻辑
4.appsettings.json用来配置AspNetCore项目的配置信息(在此主要用来配置ip和端口)
5.App.xaml.cs在项目启动时,实现GrpcServer的初始化。
6.GrpcServer是个xml结构的配置文件,用于管理项目引用的框架和包含的文件等信息。
7.在编辑完GrpcServer的配置文件后,可以看到项目的Frameworks中添加了Microsoft.AspNetCore.App框架。

核心是App.xaml.cs中的GrpcServer的初始化代码。


以及在GrpcServer中的xml配置信息

 

结尾

具体代码,可以在项目源码中找到相关参考,本文仅是抛砖引玉。
https://github.com/maoleigepu/GrpcServiceDemo
https://gitee.com/maoleigepu/GrpcServiceDemo


此外,强烈推荐Gihub上的gprc官方样例代码。
https://github.com/grpc/grpc-dotnet/tree/master/examples
里面的ReadMe也非常清晰的描述了,每个样例代码所实现的功能。

 

标签:项目,Grpc,AspNetCore,Server,grpc,wpf
From: https://www.cnblogs.com/maoleigepu/p/17965889

相关文章

  • WindowsServer 2019安装域服务
    WindowsServer2019安装域服务导航目录WindowsServer2019安装域服务导航一、重命名主控服务器固定IP地址重命名域控服务器二、登录并创建服务三、检验安装域服务一、重命名主控服务器固定IP地址右击电脑右下角网络的标志,点击打开“网络和internet”设置,在屏幕中间的......
  • Spark Thrift Server
    SparkThriftServer是Spark社区基于HiveServer2实现的一个Thrift服务协议和接口同HiveServer2完全一致,无缝兼容HiveServer2目的是取代HiveServer2,依旧可以和Hive的Metastore进行交互,获取Hive元数据部署SparkThriftServer后,可以直接使用Hive的Beeline客户端工具访问SparkThr......
  • SQL Server的聚集索引和非聚集索引
    SQLServer的聚集索引和非聚集索引 微软的SQLSERVER提供了两种索引:聚集索引(clusteredindex,也称聚类索引、簇集索引)和非聚集索引(nonclusteredindex,也称非聚类索引、非簇集索引)……(一)深入浅出理解索引结构实际上,您可以把索引理解为一种特殊的目录。微软的SQL......
  • 极客时间之Serverless入门
    开篇词|说来说去,到底Serverless要解决什么问题?问题一:说来说去,到底Serverless要解决什么问题?拿自己部署一套博客来说吧,常见的Node.jsMVC架构,需要购买云服务商的Linux虚拟机、RDS关系型数据库,做得好的话还要购买Redis缓存、负载均衡、CDN等等。再专业一点,可能还会考虑......
  • SQL Server 高性能写入的一些总结
    SQLServer高性能写入的一些总结 1.1.1摘要在开发过程中,我们不时会遇到系统性能瓶颈问题,而引起这一问题原因可以很多,有可能是代码不够高效、有可能是硬件或网络问题,也有可能是数据库设计的问题。本篇博文将针对一些常用的数据库性能调休方法进行介绍,而且,为了编写高效的SQ......
  • 【Powershell】管理DHCPServer
    欢迎购买课程:https://edu.51cto.com/course/35515.html适合人群:对Powershell和域控有一定基础和感兴趣的运维你将会学到:利用Powershell创建和管理DHCPServer课程简介:本课程将教你利用Powershell创建和管理DHCPServer,特别是管理DHCPFailover,详解故障转移中的负载均衡和热备模式的差......
  • SQL SERVER日期时间转字符串
    SQLSERVER日期时间转字符串一、sql server日期时间函数--当前系统日期、时间selectgetdate()--dateadd在向指定日期加上一段时间的基础上,返回新的datetime值--例如:向日期加上2天selectdateadd(day,2,'2004-10-15')--返回:2004-10-1700:00:00.000--datediff......
  • Windows Server 2016 & 2019 工作站速配脚本
    之前有一篇关于把WindowsServer打造成工作站系统的随笔,其中的步骤完全基于手工操作,一部分对系统不熟悉的朋友恐怕会找不到设置的入口。与其弄一堆截图写所谓的教程,还不如写一个程序来自动化处理。init.ps1Write-Host"`n正在启用声音服务"Set-Service-Name"Audiosrv"-Stat......
  • TURN SERVER vs. ICE SERVER
    您好!"turnserver"是指转发实时通信数据的服务器。它在网络通信中起到重要的作用,特别是在进行实时音视频通话或者实时消息传递时。您有关于转发服务器的具体问题吗?我将尽力为您提供帮助。--ICE(InteractiveConnectivityEstablishment)服务器是用于实时通信(如WebRTC)的网络服务器......
  • 如何通过kube-apiserver访问K8s集群中的App
    本文分享自华为云社区《通过kube-apiserver访问K8s集群中的App》,作者:tsjsdbd。K8s集群中的App(或者svc),通常使用ClusterIP,NodePort,Loadbalancer这些方式访问,但是你也可以通过Kube-apiserver(管理面)来访问App。在《跟唐老师学习云网络 -Kubernetes网络实现》里面,提到K8s集群里面的容......