.NET6中使用GRPC的示例代碼
Supported languages | gRPC,官網(wǎng)。至于原理就不說(shuō)了,可以百度原理之后,然后再結(jié)合代碼,事半功倍,就能很好理解GRPC了。
一、簡(jiǎn)單使用
1.使用vs2022創(chuàng)建一個(gè)grpc程序,直接就默認(rèn)值,下一步


2.文件說(shuō)明

文件1:就是對(duì)外面調(diào)用的自定義協(xié)議,也可以理解是接口,雙方必須規(guī)定一致性,把寫(xiě)的方法暴露出去。
文件2:就是一般寫(xiě)的方法,業(yè)務(wù)邏輯。
greet.proto文件
Greeter 定義的服務(wù)名字
這里結(jié)合下面寫(xiě)的,SayHello方法名字,HelloRequest請(qǐng)求參數(shù),HelloReply返回的參數(shù)

3.此時(shí),默認(rèn)的程序就是一個(gè)服務(wù)端,那么我們就創(chuàng)建一個(gè)客戶端去訪問(wèn)它
為了方便我們建立一個(gè)控制臺(tái)程序,實(shí)際情況,什么程序都是可以的

4.客戶端需要安裝3個(gè)包
- Google.Protobuf
- Grpc.Net.Client
- Grpc.Tools

5. 然后把服務(wù)端的這個(gè)文件夾整體拿過(guò)來(lái)放在客戶端下面
這個(gè)意思就是,他們有共同的協(xié)議,就互通了


6.同理,也把服務(wù)端的ItemGroup復(fù)制到客戶端
把Server改成Client
千萬(wàn)別把上面的替換了,這句在最下面
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>7.然后在Program中調(diào)用
using Grpc.Net.Client;
using GrpcService1;
namespace ClientGRPC
{
internal class Program
{
static void Main(string[] args)
{
string url = "https://localhost:5001"; //https
using (var channel = GrpcChannel.ForAddress(url))
{
var client = new Greeter.GreeterClient(channel);
var reply = client.SayHello(new HelloRequest()
{
Name = "故里2130"
});
Console.WriteLine($"結(jié)果:message:{reply.Message}");
}
Console.ReadKey();
//AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); //http調(diào)用
//string url = "http://localhost:5000";
//using (var channel = GrpcChannel.ForAddress(url))
//{
// var client = new Greeter.GreeterClient(channel);
// var reply = client.SayHello(new HelloRequest()
// {
// Name = "故里2130"
// });
// Console.WriteLine($"結(jié)果:message:{reply.Message}");
//}
//Console.ReadKey();
}
}
}8.效果

這樣,我們就完成了,簡(jiǎn)單的使用過(guò)程,和webapi的效果差不多。但是它的速度遠(yuǎn)遠(yuǎn)大于webapi。
補(bǔ)充:在IOC注入的方式調(diào)用GRPC,后面可以參考源碼

二、實(shí)際應(yīng)用
實(shí)際中使用,我們應(yīng)該結(jié)合webapi和grpc一起使用的
其實(shí)就是把剛才創(chuàng)建的GrpcService1全部遷移到webapi中就行了
1.安裝包Grpc.AspNetCore

2.復(fù)制文件

3.創(chuàng)建GreeterService.cs,直接復(fù)制就行了
using Grpc.Core;
using GrpcService1;
namespace webapiGRPC.Controllers
{
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
}4.在Program.cs中注入
using GrpcService1;
using webapiGRPC.Controllers;
namespace webapiGRPC
{
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddGrpc();
var app = builder.Build();
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
app.UseSwagger();
app.UseSwaggerUI();
//}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapGrpcService<GreeterService>();
app.MapControllers();
app.Run();
}
}
}5.在項(xiàng)目文件中,增加如下代碼
然后點(diǎn)擊生成
如果報(bào)錯(cuò)的話,一定要注意greet.proto中你寫(xiě)的命名空間,命名空間是什么,那么就引用什么,否則繼承的時(shí)候,一直報(bào)錯(cuò)
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>所有文件

6.運(yùn)行webapi和剛才的控制臺(tái)程序看效果

可以看到,webapi和控制臺(tái)程序全部通了
此時(shí),我們就可以全部使用了,對(duì)自己的軟件調(diào)用GRPC,增加效率。對(duì)外部的軟件使用webapi,比較安全
源碼:
Net6GrpcService: Net6GrpcService
到此這篇關(guān)于.NET6中使用GRPC的示例代碼的文章就介紹到這了,更多相關(guān).NET6使用GRPC內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一個(gè)簡(jiǎn)答的Access下的分頁(yè)asp.net代碼
一個(gè)簡(jiǎn)答的Access下的分頁(yè)asp.net代碼2010-03-03
.NetCore使用MailKit發(fā)送和接收郵件的方法
MailKit是一個(gè)開(kāi)源的.NET庫(kù),提供了對(duì)SMTP、POP3和IMAP的訪問(wèn),使得發(fā)送和接收電子郵件變得簡(jiǎn)單,下面是一個(gè)基本的示例,展示了如何使用MailKit來(lái)發(fā)送和接收郵件,感興趣的朋友跟隨小編一起看看吧2024-07-07
Repeater全選刪除和分頁(yè)實(shí)現(xiàn)思路及代碼
Repeater控件想必熟悉.net web開(kāi)發(fā)的人員是很了解不過(guò)的了,接下來(lái)將與大家共同學(xué)習(xí)下它的全選刪除和分頁(yè),感興趣的你可不要錯(cuò)過(guò)了哈,希望可以幫助到你2013-03-03
ASP.NET實(shí)現(xiàn)個(gè)人信息注冊(cè)頁(yè)面并跳轉(zhuǎn)顯示
這篇文章主要介紹了ASP.NET實(shí)現(xiàn)個(gè)人信息注冊(cè)頁(yè)面并跳轉(zhuǎn)顯示的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
ASP.NET Core實(shí)現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了ASP.NET Core實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
asp.net 多數(shù)據(jù)庫(kù)支持的思考
最近一直在思考如何做一個(gè)支持多種數(shù)據(jù)庫(kù)的程序,打印了很多的資料,在.NET 2.0中,新增加了DbProviderFactory抽象工廠類(lèi),讓數(shù)據(jù)層基類(lèi)可以實(shí)現(xiàn)多種數(shù)據(jù)庫(kù),但在數(shù)據(jù)訪問(wèn)層中的參數(shù)部分我覺(jué)得是個(gè)麻煩。2009-07-07
Visual Studio 2013+OpenCV2.4.10環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2013+OpenCV2.4.10環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
ASP.NET MVC頁(yè)面重定向簡(jiǎn)單介紹
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC頁(yè)面重定向的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
MVC4制作網(wǎng)站教程第二章 部分用戶功能實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了MVC4制作網(wǎng)站教程,部分用戶功能實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
asp.net 上傳或下載當(dāng)文件名包含有特殊字符"#"的處理
在上傳或下載文件時(shí),當(dāng)文件名包含有"#"特殊字符時(shí),上傳以后的文件會(huì)被改名字,造成下載也下載不了。2010-03-03

