GRPC在NET上的应用
GRPC是什么?
GRPC是一个开源RPC框架,于2015年3月开源,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf 3.0(Protocol Buffers)序列化协议,主流语言都支持 主要是支持C#
使用场景?
实现客户端调用服务端方法并取返回值 GRPC可以实现跨语言的访问
下面跟着官网文档开始干
1)先了解下protobuf?
Protocol Buffers是Google开源的一个语言无关、平台无关的通信协议,其小巧、高效和友好的兼容性设计,使其被广泛使用。
2)VS2015下新建项目
分别建立两个项目跟一个类库 分别代表着服务端 客户端 基础类库

3)引用dll
需要使用NuGet下载安装 *并引用* Google.Protobuf Grpc.Core Grpc.Tools 网站项目需要共同Publicl类库

4)定义服务
在Public类库新建文件夹命名为protos用来存放.proto文件,在文件夹下新建GetUser.proto文件 内容如下
syntax = "proto3"; option java_multiple_files = true;
option java_package = "io.grpc.examples.Public";
option java_outer_classname = "GetUserProto";
option objc_class_prefix = "HLW"; package Public;
//定义的服务
service GetUserList {
rpc GetList(pharm) returns (Userlist) {}
}
//服务的参数
message pharm {
string name = 1;
} //返回参数
message Userlist {
user userinfo=1;
int32 no=2;
} message user{
string name=1;
string detail=2;
}
5)生成代码
生成代码需要使用官网提供的grpc_csharp_plugin.exe跟protoc.exe ,工具位置在 _你的项目>> packages>>Grpc.Tools.1.14.1>>tools>>windows_x64
(也可在官网demo中找到 https://github.com/grpc/grpc)
把两个exe跟刚建好的GetUser.proto放入同一个文件夹下 地址栏运行cmd
执行命令如下:protoc.exe -I=. --csharp_out=. --grpc_out=. --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe GetUser.proto
6)把cs文件剪切到Public类库下 ,目录结构如下

7)建立服务端
服务端重写定义的服务GetUserList
GrpcDemoWebServer项目->新建GetUserI.cs文件 代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Public;
using Grpc.Core;
using System.Threading.Tasks; namespace GrpcDemoWeb.Models
{
public class GetUserI:GetUserList.GetUserListBase
{
public override Task<Userlist> GetList(pharm request, ServerCallContext context)
{
var users = new user();
users.Name = "姓名";
users.Detail = "描述";
//以下注意 不能将null值赋值给Userinfo
return Task.FromResult(new Userlist {
Userinfo= users,
No=
});
} }
}
在服务端Global.asax->Application_Start中启动服务 代码如下:
const int Port = ;
Server server = new Server
{
//重要,每次新建服务都需要在下方注册,否则会出现错误 【Status(StatusCode=Unimplemented,Detail="")】
Services = {
GetUserList.BindService(new GetUserI())
},
Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
}; server.Start();
//server.ShutdownAsync().Wait();
8)建立客户端
GRpcDemoWebClient-》新建控制器index->代码如下:
public ActionResult Index()
{
//链接对应的服务端
Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
var result = new GetUserList.GetUserListClient(channel);
//var client = new GetUser.GetUserClient(channel); //调用对应方法并传递参数
var reply = result.GetList(new pharm {Name=""});
//var reply1 = client.GetFeature(new Point { Latitude = , Longitude = });
//等待计划完成
channel.ShutdownAsync().Wait();
//返回页面
return Content(reply.Userinfo.Name);
}
9)IIS上部署两个项目 按顺序打开 1服务端 2打开客户端下/index 展示内容为“”姓名“”表示成功
9)难点记录:
还需要多加理解Protocolbuffers
rpc流式传递
原文地址:http://www.cnblogs.com/songjl/p/NETGRPC.html
源码位置:https://github.com/MrsongJl/GRPCDEMO
GRPC在NET上的应用的更多相关文章
- GRPC在NET上的实践(记录篇)
GRPC是什么? GRPC是一个开源RPC框架,于2015年3月开源,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf 3.0(Protocol Buffer ...
- gRPC 的route_guide例子
本文的例子代码在: https://github.com/grpc/grpc-go/tree/master/examples/route_guide 功能就类似目前LBS一样,在每个位置上报一些文 ...
- Golang gRPC微服务01: 介绍
gRPC 是什么 gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信.底层通信采用的是 HTTP2 协议.gRPC在设计上使用了 ProtoBuf 这种接口描述语言.这种IDL语言可以 ...
- PowerMock 支持gRPC的Mock Server实现
PowerMock是一个Mock Server的实现,它同时支持HTTP与gRPC协议接口的Mock,并提供了灵活的插件功能. 这个工具面向于前后端.测试等对有接口Mock需求的开发人员,也可以作为一 ...
- [gRPC via C#] gRPC本质的探究与实践
鉴于内容过多,先上太长不看版: grpc 就是请求流&响应流特殊一点的 Http 请求,性能和 WebAPI 比起来只快在 Protobuf 上: 附上完整试验代码:GrpcWithOutSD ...
- Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用
Hyperledger Fabric 1.0 从零开始(十)--智能合约 Hyperledger Fabric 1.0 从零开始(十一)--CouchDB 上述两章,最近网上各路大神文章云集,方案多多 ...
- 使用C#把Tensorflow训练的.pb文件用在生产环境
训练了很久的Tf模型,终于要到生产环境中去考研一番了.今天花费了一些时间去研究tf的模型如何在生产环境中去使用.大概整理了这些方法. 继续使用分步骤保存了的ckpt文件 这个貌似脱离不了tensorf ...
- .NET周报【10月第1期 2022-10-11】
本周精选 继C#实现await/async无栈协程几年后,davidwrighton实现了.NET绿色线程(有栈协程)的原型 https://github.com/dotnet/runtimelab/ ...
- ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...
随机推荐
- 【SCOI 2005】 互不侵犯
[题目链接] 点击打开链接 [算法] 和HDU2167类似 先搜出一行内符合的状态,然后,f[i][j][k]表示第i行,第j种状态,放了k个,合法的方案,DP即可 [代码] #include< ...
- linux块设备模型架构框架
Linux块设备的原理远比字符设备要复杂得多,尽管在linux这一块的方法论有很多相似之处,但考虑到它是用中块结构,它常常要搭配内存页管理,页缓冲块缓冲来改善硬盘访问的速度,按照块硬件最大的性能要求进 ...
- 《Image Generation with PixelCNN Decoders》论文笔记
论文背景:Google Deepmind团队于2016发表在NIPS上的文章 motivation:提出新的image generation model based on pixelCNN[1]架构. ...
- C++实现二叉树(建树,前序,中序,后序)递归和非递归实现
#include<iostream> #include<string.h> #include<stack> using namespace std; typedef ...
- 09_传智播客iOS视频教程_自动释放池与NSLog函数
不要管什么是自动释放池,现在给你讲你也听不懂.就业班才讲,不要知道太多,知道太多对你不好.电影里面死的最惨的人就是知道最多的人.把代码写到自动释放池里面就可以了.NSLog是printf的增强版,它增 ...
- 洛谷 P4016 负载平衡问题 【最小费用最大流】
求出平均数sum,对于大于sum的点连接(s,i,a[i]-sum,0),表示这个点可以流出多余的部分,对于小于sum的点连接(i,t,sum-a[i],0)表示这个点可以接受少的部分,然后每个点向相 ...
- 【API】反转输入字符(Java)
请求输入字符, 输出反转. import java.util.Scanner; public class T01 { public static void main(String[] args) { ...
- .NET CORE技术路线图
分享一张图.来自微信.不做解释.
- Canvas 入门案例
五. Canvas 入门案例 1. canvas 圆形绘制 <!DOCTYPE html> <html lang="en"> <head> ...
- Java 反射机制详解(上)
一.什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...