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上的应用的更多相关文章

  1. GRPC在NET上的实践(记录篇)

    GRPC是什么? GRPC是一个开源RPC框架,于2015年3月开源,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf 3.0(Protocol Buffer ...

  2. gRPC 的route_guide例子

      本文的例子代码在: https://github.com/grpc/grpc-go/tree/master/examples/route_guide 功能就类似目前LBS一样,在每个位置上报一些文 ...

  3. Golang gRPC微服务01: 介绍

    gRPC 是什么 gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信.底层通信采用的是 HTTP2 协议.gRPC在设计上使用了 ProtoBuf 这种接口描述语言.这种IDL语言可以 ...

  4. PowerMock 支持gRPC的Mock Server实现

    PowerMock是一个Mock Server的实现,它同时支持HTTP与gRPC协议接口的Mock,并提供了灵活的插件功能. 这个工具面向于前后端.测试等对有接口Mock需求的开发人员,也可以作为一 ...

  5. [gRPC via C#] gRPC本质的探究与实践

    鉴于内容过多,先上太长不看版: grpc 就是请求流&响应流特殊一点的 Http 请求,性能和 WebAPI 比起来只快在 Protobuf 上: 附上完整试验代码:GrpcWithOutSD ...

  6. Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用

    Hyperledger Fabric 1.0 从零开始(十)--智能合约 Hyperledger Fabric 1.0 从零开始(十一)--CouchDB 上述两章,最近网上各路大神文章云集,方案多多 ...

  7. 使用C#把Tensorflow训练的.pb文件用在生产环境

    训练了很久的Tf模型,终于要到生产环境中去考研一番了.今天花费了一些时间去研究tf的模型如何在生产环境中去使用.大概整理了这些方法. 继续使用分步骤保存了的ckpt文件 这个貌似脱离不了tensorf ...

  8. .NET周报【10月第1期 2022-10-11】

    本周精选 继C#实现await/async无栈协程几年后,davidwrighton实现了.NET绿色线程(有栈协程)的原型 https://github.com/dotnet/runtimelab/ ...

  9. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

随机推荐

  1. Linux设备模型 (3)

    在上文中,我们介绍到如何使用default attribute.Default attribute使用很方便,但不够灵活.比如上篇文章在Kobject一节中提到的那个例子,name和val这两个att ...

  2. maven中添加json-lib的jar包

    在maven配置文件pom.xml中添加如下配置信息: <dependency> <groupId>net.sf.json-lib</groupId> <ar ...

  3. 使用VS进行打包程序解决生成两个文件的问题(压缩后只有一个exe)

    使用VS打包创建setup相信大家都挺熟的了,不熟的话网上也有很多,就不做介绍了,现在给大家写下怎么将生成的那些文件夹以及setup.exe和.msi 文件打包成一个exe 我们这里使用的是Winra ...

  4. CodeForces 730G Car Repair Shop (暴力)

    题意:给定 n 个工作的最好开始时间,和持续时间,现在有两种方法,第一种,如果当前的工作能够恰好在最好时间开始,那么就开始,第二种,如果不能,那么就从前找最小的时间点,来完成. 析:直接暴力,每次都先 ...

  5. python pip安装第三方模块

    一.pip工具使用 安装windows版本python,自带pip工具.2者路径相同. 如果设置了环境路径,可以直接在命令提示符窗口下尝试运行pip.如果没有设置环境路径,可以先cd命令到pip工具的 ...

  6. bzoj 1296: [SCOI2009]粉刷匠【dp+背包dp】

    参考:http://hzwer.com/3099.html 神题神题 其实只要知道思路就有点都不难-- 先对每一行dp,设g[i][j]为这行前i个格子粉刷了k次最大粉刷正确数,随便n^3一下就行 设 ...

  7. ————————C语言中快速排序方法——————————————

    在对浮点型排序是一定要用三木运算符(三目运算符内容下去自己看),因为如果也是用整形那样的减法的时候如果是两个十分相近的数字 可能返回一个小数(自己一会去试试),冉冉他cmp返回值是int(试试别的)因 ...

  8. SwipeLayou与ScrollerView滑动冲突

    在SwipeLayout内嵌套ScorllerView滑动会出现上滑滑动冲突,ScollerView不能往上滑,,,,,, mSlv.getViewTreeObserver().addOnScroll ...

  9. codeforces 555B Case of Fugitive

    题目连接: http://codeforces.com/problemset/problem/555/B 题目大意: 有n个岛屿(岛屿在一列上,可以看做是线性的,用来描述岛屿位置的是起点与终点),m个 ...

  10. bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【LCT】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 第一道LCT,调了3天,发现是智障bug,我的青春... 主要参考了黄学长的代码,也没 ...