.NET6中使用GRPC的示例代碼
Supported languages | gRPC,官網(wǎng)。至于原理就不說了,可以百度原理之后,然后再結合代碼,事半功倍,就能很好理解GRPC了。
一、簡單使用
1.使用vs2022創(chuàng)建一個grpc程序,直接就默認值,下一步
2.文件說明
文件1:就是對外面調用的自定義協(xié)議,也可以理解是接口,雙方必須規(guī)定一致性,把寫的方法暴露出去。
文件2:就是一般寫的方法,業(yè)務邏輯。
greet.proto文件
Greeter 定義的服務名字
這里結合下面寫的,SayHello方法名字,HelloRequest請求參數(shù),HelloReply返回的參數(shù)
3.此時,默認的程序就是一個服務端,那么我們就創(chuàng)建一個客戶端去訪問它
為了方便我們建立一個控制臺程序,實際情況,什么程序都是可以的
4.客戶端需要安裝3個包
- Google.Protobuf
- Grpc.Net.Client
- Grpc.Tools
5. 然后把服務端的這個文件夾整體拿過來放在客戶端下面
這個意思就是,他們有共同的協(xié)議,就互通了
6.同理,也把服務端的ItemGroup復制到客戶端
把Server改成Client
千萬別把上面的替換了,這句在最下面
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
7.然后在Program中調用
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($"結果:message:{reply.Message}"); } Console.ReadKey(); //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); //http調用 //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($"結果:message:{reply.Message}"); //} //Console.ReadKey(); } } }
8.效果
這樣,我們就完成了,簡單的使用過程,和webapi的效果差不多。但是它的速度遠遠大于webapi。
補充:在IOC注入的方式調用GRPC,后面可以參考源碼
二、實際應用
實際中使用,我們應該結合webapi和grpc一起使用的
其實就是把剛才創(chuàng)建的GrpcService1全部遷移到webapi中就行了
1.安裝包Grpc.AspNetCore
2.復制文件
3.創(chuàng)建GreeterService.cs,直接復制就行了
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.在項目文件中,增加如下代碼
然后點擊生成
如果報錯的話,一定要注意greet.proto中你寫的命名空間,命名空間是什么,那么就引用什么,否則繼承的時候,一直報錯
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Server" /> </ItemGroup>
所有文件
6.運行webapi和剛才的控制臺程序看效果
可以看到,webapi和控制臺程序全部通了
此時,我們就可以全部使用了,對自己的軟件調用GRPC,增加效率。對外部的軟件使用webapi,比較安全
源碼:
Net6GrpcService: Net6GrpcService
到此這篇關于.NET6中使用GRPC的示例代碼的文章就介紹到這了,更多相關.NET6使用GRPC內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
asp.net mvc CodeFirst模式數(shù)據(jù)庫遷移步驟詳解
這篇文章主要為大家詳細介紹了asp.net mvc CodeFirst模式數(shù)據(jù)庫遷移步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10ASP.NET MVC制作404跳轉實例(非302和200)
本篇文章主要介紹了ASP.NET MVC制作404跳轉實例(非302和200) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04asp.net中JavaScript數(shù)據(jù)驗證實現(xiàn)代碼
我對JavaScript一直不了解。常常為了一點點的數(shù)據(jù)驗證和無刷新就去動用AJAX,實在不爽——有點殺雞用牛刀的感覺。2010-05-05一步步打造簡單的MVC電商網(wǎng)站BooksStore(2)
這篇文章主要和大家一起一步步打造一個簡單的MVC電商網(wǎng)站,MVC電商網(wǎng)站BooksStore第二篇,添加分類導航、加入購物車,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04