使用ASP.NET Core开始使用gRPC客户端和服务器
目录
介绍
GRPC
Protobuf文件
背景
先决条件
使用代码
第1步——创建gRPC服务应用程序
gRPC项目结构
构建并运行应用程序
第2步:创建客户端控制台.NET核心应用程序
添加必需的包
通过管理NuGet包安装包
将Protobuf文件添加到客户端应用程序
使用客户端Program.cs文件
兴趣点
- 下载示例 - 1.6 MB
介绍
在本文中,我们将了解如何使用ASP.NET Core模板创建gRPC服务。我们还将使用.NET控制台核心创建一个客户端应用程序,以直接调用gRPC服务的服务器方法来发送和接收来自客户端应用程序的消息。
GRPC
gRPC是一种快速,高效,轻量级的远程过程调用,广泛应用于微服务。gRPC最初由谷歌开发,现在它是开源的。
在ASP.NET Core3中,我们可以看到新模板已作为gRPC服务包含在内。是的,使用此模板,我们可以创建我们的gRPC服务并创建一个客户端应用程序,如.NET Core Console,WinForms或ASP.NET Core,用于数据序列化,以便从客户端向服务器发送和接收数据。gRPC使用HTTP / 2进行传输。gRPC使用协议缓冲区(又称Protobuf)作为数据序列化格式,用于从客户端向服务器发送和接收。
Protobuf文件
gRPC使用protobuf作为默认数据序列化,来从客户端和服务器发送和接收数据。换句话说,protobuf用作接口设计语言。为了使用gRPC服务,我们还需要了解protobuf文件。Protobuf文件有两部分,一部分用于定义gRPC服务,另一部分用于定义客户端到服务器之间发送的消息。在这里,我们将看到protobuf文件的每个部分。
在protobuf文件的第一行,我们需要声明语法,这个语法是提到我们使用的协议缓冲语言的版本,在我们的例子中,我们使用的是proto3。
syntax = "proto3";
接下来,我们提供我们的解决方案名称,也是C#应用程序命名空间名称。
option csharp_namespace = "GrpcGreeter";
接下来是服务部分,在这里,我们创建了名为Greeter的服务。当我们创建gRPC服务应用程序时,默认情况下已添加了proto文件,并且已自动创建以下服务。
在此Greeter服务中,我们在这个调用创建了2个SayHello,Servermessage调用,每个调用都以消息的形式发送HelloRequest并接收HelloReplay消息。
// The greeting service definition.
service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}rpc Servermessage (HelloRequest) returns (HelloReply) {}
}
参考链接:https://docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-3.0
背景
确保已在计算机上安装了所有必备组件。如果没有,则逐个下载并安装它们。
先决条件
- Visual Studio 2019的最新预览版
- .NET Core 3.0 Preview 6 SDK
使用代码
第1步——创建gRPC服务应用程序
安装上面列出的所有先决条件后,单击桌面上的开始>>程序>> Visual Studio 2019 >> Visual Studio 2019>>单击“新建项目”。
单击ASP.NET Core Web Application,然后单击“下一步”。
输入您的项目名称,然后单击“创建”按钮。
现在,我们可以看到已经列出了ASP.NET Core 3.0。我们选择gRPC服务并单击创建以创建我们的gRPC服务应用程序。
gRPC项目结构
一旦我们创建了gRPC服务项目,我们就可以看到默认情况下项目将包含带有protobuf文件的Protos文件夹作为带有“.proto”文件的扩展名。此外,我们可以使用我们的Service类文件查看Services文件夹。在本文的开头,我们已经详细了解了什么是protobuf文件以及protobuf文件包含的内容。在我们的gRPC服务项目中,我们可以看到默认情况下使用sayHello方法调用创建了proto文件,以便在客户端和服务器之间发送和接收请求并重复进行。
我们再添加一个方法调用:
rpc Servermessage(HelloRequest)返回(HelloReply){}
在这里,我们为我们的示例添加了一个方法调用,让我们看看如何在我们的服务和客户端应用程序中使用它。这是greet.proto文件的完整代码。
syntax = "proto3";option csharp_namespace = "shanugRPC";package Greet;// The greeting service definition.
service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}rpc Servermessage (HelloRequest) returns (HelloReply) {}
}// The request message containing the user's name.
message HelloRequest {string name = 1;
}// The response message containing the greetings.
message HelloReply {string message = 1;
}
service文件夹的服务类默认为GreeterService。此类具有默认创建的SayHello方法。像这样,我们可以添加自己的方法来发送响应。
现在我们还需要在 此服务中添加一个Override方法作为ServerMessage,我们可以将方法消息返回给客户端应用程序。像这样,您可以创建任意数量的方法,并从客户端应用程序调用它们以获取消息请求并从服务器回复。
这是我们Service的完整代码。
public class GreeterService : Greeter.GreeterBase{public override Task<HelloReply>SayHello(HelloRequest request, ServerCallContext context){return Task.FromResult(new HelloReply{Message = "Hello " + request.Name});}public override Task<HelloReply>Servermessage(HelloRequest request, ServerCallContext context){return Task.FromResult(new HelloReply{Message = "Your Friend Name is : " + request.Name});}}
appsetting.json文件将包含用于该服务的协议。在这里,我们可以看到Http2协议已经用于gRPC服务。
构建并运行应用程序
当我们构建并运行应用程序时,我们可以看到服务正在成功运行,我们也可以看到我们的gRPC服务正在侦听http://localhost:50051。
请注意,由于gRPC是模板配置为使用TSL,客户端需要使用HTTPS来调用服务器。但是在这里,我们使用http来在我们的客户端应用程序中使用http,我们需要使用下面的代码来连接服务器和客户端
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
我们将在创建客户端应用程序时详细了解这一点。
第2步:创建客户端控制台.NET核心应用程序
安装上面列出的所有先决条件后,单击桌面上的开始>>程序>> Visual Studio 2019 >> Visual Studio 2019。>>单击“新建项目”。
单击Console App(.NET Core)并单击“下一步”。
输入您的项目名称,然后单击“创建”按钮。
现在我们的控制台应用程序已创建。
添加必需的包
为了客户端和GRPC服务端之间发送和接收消息,我们需要添加Grpc.Net.Client,Google.Protobuf和Grpc.Tools包到我们的项目。
Grpc.Net.Client软件包用于.NET Core客户端,Google.Protobuf软件包包含用于C#语言的protobuf消息API。Grpc.Tool包含protobuf文件的工具支持。
我们可以通过NuGet Package Manager或Manage NuGet Packages安装此软件包。
通过管理NuGet包安装包
右键单击您的gRPC客户端项目,然后单击Manage NuGet Packages。
选择Browse选项卡,输入“Grpc.net.Client”后搜索并将软件包安装到我们的客户端项目中。
与此相同,安装“ Google.Protobuf”搜索并将包安装到我们的客户端项目。
与此相同,安装“ Grpc.Tools”搜索并将包安装到我们的客户端项目。
将Protobuf文件添加到客户端应用程序
在我们的客户端应用程序中,我们需要添加相同的protobuf文件,用于从客户端到服务器的数据发送和接收。首先,我们在客户端项目中创建Protos文件夹。
现在我们需要将我们在Service项目中使用的protobuf添加到Protos文件夹中。
右键单击Protos文件夹,然后单击Add Existing Item。
选择并添加我们在Service项目中使用的greet.proto文件。
现在为了在我们的项目中使用greet.proto文件,我们需要将带有Protobuf 的itemGroup添加到我们的项目中。
右击我们的项目,然后单击编辑项目文件。
将以下代码添加到项目文件中:
<ItemGroup><Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>
构建应用程序以便在客户端应用程序中使用我们的服务。
使用客户端Program.cs文件
现在是我们创建客户端程序以便从客户端向我们的gRPC服务发送和接收消息的时候了。
为此,我们打开program.cs文件并添加以下命名空间。shanugRPC是我们的服务项目命名空间。
using shanugRPC ;
using Grpc.Net.Client;
using Grpc.Core;
现在在yourprogram.cs文件的Main方法中添加以下代码:
static async Task Main(string[] args){var httpClient = new HttpClient();httpClient.BaseAddress = new Uri("https://localhost:50051");var client = GrpcClient.Create<Greeter.GreeterClient>(httpClient);var reply = await client.SayHelloAsync(new HelloRequest { Name = "GreeterClient" });Console.WriteLine("Greeting: " + reply.Message);Console.WriteLine("Press any key to exit...");Console.ReadKey();}
构建并运行应用程序
注意:首先运行我们的服务应用程序,然后运行客户端应用程序进行客户端和服务器通信。在运行客户端之前,始终确保服务正在运行。
当我们运行应用程序时,我们可能会收到错误
这意味着我们的服务监听 http://localhost:50051 ,但上面的代码适用于https,在我们的示例中,我们需要使用https://localhost:50051,所以我们更改代码如下:
static async Task Main(string[] args){//----------------AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport",true);var httpClient = new HttpClient(); httpClient.BaseAddress = new Uri("http://localhost:50051");var client = GrpcClient.Create<Greeter.GreeterClient>(httpClient);var reply = await client.SayHelloAsync(new HelloRequest { Name = "Shanu" });Console.WriteLine("Greeting: " + reply.Message);Console.WriteLine("Press any key to exit...");Console.ReadKey();}
代码部分说明
要使用http而不是https,请先设置以下代码部分:
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);var httpClient = new HttpClient();
接下来,我们使用url创建客户端对象:
var httpClient = new HttpClient();httpClient.BaseAddress = new Uri("http://localhost:50051");var client = GrpcClient.Create<Greeter.GreeterClient>(httpClient);
接下来,我们通过调用service方法发送并从服务获取重播,并传递请求并获取回复消息。
var reply = await client.SayHelloAsync(new HelloRequest { Name = "Shanu" });
Console.WriteLine("Greeting: " + reply.Message);
运行应用程序
当我们运行应用程序时,我们可以看到结果,因为我们从客户端向服务发送名称作为Shanu,我们得到服务的回复为“ Hello Shanu”。
现在我们更改代码以获取我们的名字和我们的朋友的名字,以便发送给服务进行diriment方法调用,并从每条消息中获取它们并显示结果。
这是完整的代码。我们使用了类似的代码,并要求用户输入他们的姓名和朋友姓名,并调用服务方法SayHello和Servermessage方法来发送和接收来自客户端和服务器的消息。
static async Task Main(string[] args){var httpClient = new HttpClient();// The port number(5001) must match the port of the gRPC server.httpClient.BaseAddress = new Uri("https://localhost:50051");var client = GrpcClient.Create<Greeter.GreeterClient>(httpClient);//----------------AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);var httpClient = new HttpClient();// The port number(5001) must match the port of the gRPC server.httpClient.BaseAddress = new Uri("http://localhost:50051");var client = GrpcClient.Create<Greeter.GreeterClient>(httpClient);//-----------------------Boolean isexit = true;while (isexit){Console.WriteLine("Enter Your Name to send request to the server : ");String myName = Console.ReadLine();var reply = await client.SayHelloAsync(new HelloRequest { Name = myName });Console.WriteLine("Hello world : " + reply.Message);Console.WriteLine("Enter YourFriend Name : ");String friendName = Console.ReadLine();var serverreply = await client.ServermessageAsync(new HelloRequest { Name = friendName });Console.WriteLine("Message from Server -> " + serverreply.Message);Console.WriteLine("Do you want to continue say Y or N");string YN = Console.ReadLine();if (YN.ToLower() == "y"){isexit = true;}else{isexit = false;}Console.WriteLine("========================== ============");Console.WriteLine("");}Console.WriteLine("Press any key to exit...");Console.ReadKey();}
兴趣点
在本文中,我讨论了如何使用gRPC服务和客户端应用程序来发送和接收来自gRPC服务的消息。为了使用此示例,请不要忘记安装.NET Core 3.0和Visual Studio 2019预览。
使用ASP.NET Core开始使用gRPC客户端和服务器相关推荐
- ASP.NET Core 3.0 gRPC 身份认证和授权
一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...
- ASP.NET Core 3.0 gRPC 双向流
目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 认证授权 一.前言 在前一文 < 二. 什么 ...
- 如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理 ?
咨询区 Dmitriy 我在 ASP.NET Core 中使用 GRPC.ASPNETCore 工具包写 gRPC 服务,现在我想实现 gRPC 的异常全局拦截,我的代码如下: app.UseExce ...
- gRPC in ASP.NET Core 3.x - gRPC 消息定义
之前写了几篇关于 Protoco Buffer 的文章. gRPC in ASP.NET Core 3.x - gRPC 简介(1) gRPC in ASP.NET Core 3.x - gRPC 简 ...
- gRPC in ASP.NET Core 3.x - gRPC 简介(2)
前一篇: gRPC in ASP.NET Core 3.x - gRPC 简介(1) 身份认证 这里指的不是用户的身份认证,而是指多个server和client之间,它们如何识别出来谁是谁,并且能安全 ...
- 处理ASP.NET Core中的HTML5客户端路由回退
在使用由Angular,React,Vue等应用程序框架构建的客户端应用程序时,您总是会处理HTML5客户端路由,它将完全在浏览器中处理到页面和组件的客户端路由.几乎完全在浏览器中... HTML5客 ...
- VS2022(Visual Studio)发布ASP.NET Core Web API应用到Web服务器(IIS)
概述 写完代码后,最常用.简单的发布方式,就是将应用发布到文件夹,然后将publish文件夹复制到要部署的机器上(本地.局域网服务器.云服务器等). 但是在实际工作中,可能会遇到需要频繁地发布,以使应 ...
- asp.net core 3.0 gRPC框架小试
什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...
- ASP.NET Core技术研究-全面认识Web服务器Kestrel
因为IIS不支持跨平台的原因,我们在升级到ASP.NET Core后,会接触到一个新的Web服务器Kestrel.相信大家刚接触这个Kestrel时,会有各种各样的疑问. 今天我们全面认识一下ASP. ...
最新文章
- 分布式图数据库在贝壳的应用实践
- linux用户和文件目录管理
- 真正的中台价值,「炒作」之后才被看见
- python学习笔记(二)---编辑工具sublimeText3运行python
- Hibernate修改命名策略
- cocos2d-x 2x 菜鸟编塔防 02 添加敌人
- uni-app实现上拉加载更多
- android unity 关闭应用_Unity 之 唤起调用 Android 其它应用app的方法
- 一大推DISCUZ系列插件模板来了,需要的免费抢!!!
- HTML5 Audio时代的MIDI音乐文件播放 .
- aardio部署_GitHub - wiseshrek/aardio-erp: aardio10开发企业管理系统:aardio-erp框架源码
- 向NS2中添加协议PING
- tabbaritem 图片太大解决方案
- python实现最小二乘法
- vertica数据库监控
- Android开发:如何实现收发短信
- 结果和过程到底哪个重要?
- 三位一体自荐信计算机专业,三位一体自荐信写法和范文
- 心流体验:专注的快乐--读书笔记
- 关于switch的参数类型
热门文章
- mysql+导入+306_mysql常用命令二
- 7z001怎么解压在安卓手机上面_安卓zip文件压缩RAR解压手机下载-安卓zip文件压缩RAR解压v1.0最新版下载...
- html间隔怎么打_iPhone手机便签内容怎么设为重要事项?
- win10 html css,Win10创造者更新:Edge支持CSS自定义属性
- redis查看某一个key的大小_Redis笔记
- python串口实时读取数据画图_python串口绘图
- 最硬核Visual AssistX 安装破解(2019最新 通用)内含破解原理
- 部署项目到Linux服务器步骤
- Linux内核深入理解中断和异常(8):串口驱动程序
- Memcached下载与安装