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. ABP框架实践基础篇之开发UI层

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...

  2. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  3. 实践详细篇-Windows下使用Caffe训练自己的Caffemodel数据集并进行图像分类

    三:使用Caffe训练Caffemodel并进行图像分类 上一篇记录的是如何使用别人训练好的MNIST数据做训练测试.上手操作一边后大致了解了配置文件属性.这一篇记录如何使用自己准备的图片素材做图像分 ...

  4. k8s1.4.3安装实践记录(2)-k8s安装

    前面一篇已经安装好了ETCD.docker与flannel(k8s1.4.3安装实践记录(1)),现在可以开始安装k8s了 1.K8S 目前centos yum上的kubernetes还是1.2.0, ...

  5. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

  6. 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比

    上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...

  7. 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果

    上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...

  8. 3、大型项目的接口自动化实践记录----开放API练习

    开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...

  9. 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介

    1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...

随机推荐

  1. 2017腾讯实习生Android客户端开发面试总结

    欢迎访问我的个人博客转发请注明出处:http://wensibo.top/2017/04/13/2017Tencent_review/ 前言 先做个自我介绍,本人大三狗一枚,就读的是广州一个普通的一本 ...

  2. .Net Core的一些个人总结

    从开始接触.Net Core到现在已经有将近一年的时间了,今天来做一下相关的学习总结,顺便也回忆一下自己这段时间以来的成长. 有一点不得不承认的是,在接触.Net Core之前,我对于linux系统一 ...

  3. CGLIB和JDK代理

    需要的架包:在spring中提供对CGLIB的支持 一.JDK的动态代理 1.接口IUserDao package cn.itcast.spring3.jdk.proxy; public interf ...

  4. vue2 与后台信息交互

    vue-resource  是vue的ajax请求插件 vue-resource文档:https://github.com/vuejs/vue-resource/blob/master/docs/ht ...

  5. java多线程基本概述(十三)——Executor

    1:Executor接口 public interface Executor 执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等 ...

  6. 【从无到有】HTML的初识——part1

    Ⅰ.HTML的初识 1.HTML:超文本标签语言(网页源代码) 2.html的基本结构: <html> <head> <meta charset="utf-8& ...

  7. C语言学习第五章

    今天要进行一个重要元素数组的学习了.这一章要掌握什么是数组,数组怎么样命名,数组怎么样使用,以及一些常见的错误和需要注意的事项. 一.      数组的基本概念 数组是可以在内存中连续存储多个元素的结 ...

  8. bzoj1013 [JSOI2008]球形空间产生器

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...

  9. LESS的一点自己的理解(1)

    写前端的时间也不短了,Less也用过几次,都是现学现用,没有仔细的梳理过,今天就有条理的梳理下.参考文章是一篇不错的哦.下面会附上链接的,废话不多说,开始正题. 首先应该说下什么是Less,Less是 ...

  10. web开发中,post与get的区别

    区别: 1.Get是从服务器上获取数据,Post是向服务器传送数据. 2.Get是把参数数据队列加到提交表单的Action属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.Post是 ...