.net 8下的gRPC(一)hello world程序

勇哥注:

本文其实是微软官方对于gRPC通讯在.net 8中应用的介绍。


微软官方介绍:

https://learn.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-8.0&tabs=visual-studio


(一)创建服务端


在vs2022中,搜索grpc,选择创建grpc的项目。

image.png

创建的解决方案中,我们看到自动引用grpc的包。

如果它为感叹号,请编译一次程序,就好了。

image.png


这个服务端项目不需要做任何修改,请直接运行。

运行后,可以看到已经暴露了http的请求地址:

image.png

我们用浏览器访问这个地址:

出现下面这个信息

An HTTP/1.x request was sent to an HTTP/2 only endpoint.  

试图连接的服务器或服务的端点(endpoint)只支持HTTP/2,并不接受HTTP/1.x的请求

因为gRPC是要求http/2的请求的。

image.png

有关http/1.x和http/2的背景知识如下:

HTTP/1.x:这是HTTP的早期版本,其中“x”通常代表1或0(也就是HTTP/1.0或HTTP/1.1)。
HTTP/1.x使用文本格式来传输数据,并且每次请求和响应都需要一个新的TCP连接
(虽然HTTP/1.1引入了持久连接来复用TCP连接)。

HTTP/2:这是HTTP的一个新版本,它带来了许多改进,包括多路复用
(允许单个TCP连接上并发多个请求/响应)、头部压缩(减少请求和响应头的大小)、
服务器推送(允许服务器主动发送资源到客户端)等。
HTTP/2使用二进制格式来传输数据,这使其更加高效。


我们再试下https的访问:

image.png

这个信息的意思是:
不能直接使用 HTTP 客户端(如 curl、Postman、普通的 HTTP 库等)来与 gRPC 端点通信。

相反,你需要使用专门设计的 gRPC 客户端库来与服务端进行通信。


因此,我们其实不能用浏览器直接访问,需要由gRPC客户端程序来访问。


(二)创建客户端


客户端我们创建一个控制台程序。


先来引用包,有三个,在包控制台中使用下面指令安装:

Install-Package Grpc.Net.Client

Install-Package Google.Protobuf

Install-Package Grpc.Tools


然后把服务器端的Protos目录拷贝过来。

image.png

只用修改一下它的命名空间:

这个命名空间就是你的控制台程序的命名空间,要保持一样。

image.png


点击ConsolApp1,在它的配置文件中,添加

<ItemGroup>
  <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>

image.png


最后在Program.cs中敲入代码:

注意勇哥这里没有启动用顶级语句,所以你得自己把Main函数加上async。

目前在.NET中,已经完全推荐异步代码了。所以gRPC的这些库函数也都是异步调用了。

另外注意一点,我们必须调用https,不能用http。

所以下面的localHost:7275 端口号就是要写成服务器暴露出来的https端口号。

   internal class Program
   {
       static async Task Main(string[] args)
       {
           //Console.WriteLine("Hello, World!");
           using var channel = GrpcChannel.ForAddress("https://localhost:7275");
           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();
       }
   }


结果如下:

image.png

Hello GreeterClinet这段话,就是服务器端返回的。

下面就是服务器端的SayHello。

image.png



链接:https://pan.baidu.com/s/1LI3YGjnBvLG7CykLYQzTOg 

提取码:vwwa 

--来自百度网盘超级会员V6勇哥的分享



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-06-02 11:56:53 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864