上手前准备工作

支持操作系统:windows、OS X、Linux。实例采用.net、.net core sdk。

  • The .NET Core SDK command line tools.
  • The .NET framework 4.5 (for OS X and Linux, the open source .NET Framework implementation, “Mono”, at version 4+, is suitable)
  • Git (to download the sample code)

在windows系统开发环境, 采用 Visual Studio开发工具, 需要满足以下要求:

  • .NET Framework 4.5+
  • Visual Studio 2013 or 2015.
  • Git (to download the sample code)

在OS X 系统开发环境, 采用Xamarin Studio开发工具, 需要满足以下要求:

  • Mono 4.4.2+ (or Mono 4+ is sufficient if you manually update NuGet to version 2.12+)
  • Xamarin Studio 6.0+
  • Git (to download the sample code)

在 Linux 系统开发环境, 采用 the Monodevelop IDE,需要满足以下要求 :

  • Mono 4.4.2+ (or Mono 4+ is sufficient if you manually update nuget to version 2.12+)
  • MonoDevelop 5.9+
  • A NuGet executable, at version 2.12+ (you’ll need to restore NuGet package dependencies from the command line)
  • Git (to download the sample code)

下载官方demo

  1. git clone -b v1.6.x https://github.com/grpc/grpc
  1. 打开下载的demo文C:\Users\YPF\Desktop\grpc
  2. 进入目录examples/csharp/helloworld

Build the example

  1. 使用Visual Studio打开Greeter.sln
  2. 在该项目的解决右键重新生成解决方案

项目会自动使用NuGet进行必要的package的安装。

运行 a gRPC application

  1. 运行服务
  1. > cd GreeterServer/bin/Debug
  2. > GreeterServer.exe

  1. 运行客户端
  1. > cd GreeterClient/bin/Debug
  2. > GreeterClient.exe

更新 a gRPC service

打开目录examples/protos/helloworld.proto

将原来的文件修改为如下并保存:

  1. // The greeting service definition.
  2. service Greeter {
  3. // Sends a greeting
  4. rpc SayHello (HelloRequest) returns (HelloReply) {}
  5. // Sends another greeting
  6. rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
  7. }
  8. // The request message containing the user's name.
  9. message HelloRequest {
  10. string name = 1;
  11. }
  12. // The response message containing the greetings
  13. message HelloReply {
  14. string message = 1;
  15. }

生成 gRPC code

在demo的根目录(examples/csharp/helloworld)下执行如下命令:

  1. packages\Grpc.Tools.1.6.1\tools\windows_x86\protoc.exe -I../../protos --csharp_out Greeter --grpc_out Greeter ../../protos/helloworld.proto --plugin=protoc-gen-grpc=packages/Grpc.Tools.1.6.1/tools/windows_x86/grpc_csharp_plugin.exe

这里的Grpc.Tools.1.6.1 这个命令必须是跟项目中使用NuGet安装的版本一致,否则会报错。

更新并从新运行

修改服务端代码

GreeterServer/Program.cs

  1. class GreeterImpl : Greeter.GreeterBase
  2. {
  3. // Server side handler of the SayHello RPC
  4. public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
  5. {
  6. return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
  7. }
  8. // Server side handler for the SayHelloAgain RPC
  9. public override Task<HelloReply> SayHelloAgain(HelloRequest request, ServerCallContext context)
  10. {
  11. return Task.FromResult(new HelloReply { Message = "Hello again " + request.Name });
  12. }
  13. }

修改服务端代码

GreeterClient/Program.cs

  1. public static void Main(string[] args)
  2. {
  3. Channel channel = new Channel("127.0.0.1:50051", ChannelCredentials.Insecure);
  4. var client = new Greeter.GreeterClient(channel);
  5. String user = "you";
  6. var reply = client.SayHello(new HelloRequest { Name = user });
  7. Console.WriteLine("Greeting: " + reply.Message);
  8. var secondReply = client.SayHelloAgain(new HelloRequest { Name = user });
  9. Console.WriteLine("Greeting: " + secondReply.Message);
  10. channel.ShutdownAsync().Wait();
  11. Console.WriteLine("Press any key to exit...");
  12. Console.ReadKey();
  13. }

运行 a gRPC application

  • 运行服务

cd GreeterServer/bin/Debug

GreeterServer.exe

  • 运行客户端

cd GreeterClient/bin/Debug

GreeterClient.exe

参考文章:

gRPC官方快速上手学习笔记(c#版)的更多相关文章

  1. [Docker]Docker快速上手学习笔记

    0. 学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器.这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境相互独立,即使某一个容器崩溃也不会影响到其它容器 ...

  2. Sass简单、快速上手_Sass快速入门学习笔记总结

    Sass是世界上最成熟.稳定和强大的专业级css扩展语言 ,除了Sass是css的一种预处理器语言,类似的语言还有Less,Stylus等. 这篇文章关于Sass快速入门学习笔记. 资源网站大全 ht ...

  3. FWT快速沃尔什变换学习笔记

    FWT快速沃尔什变换学习笔记 1.FWT用来干啥啊 回忆一下多项式的卷积\(C_k=\sum_{i+j=k}A_i*B_j\) 我们可以用\(FFT\)来做. 甚至在一些特殊情况下,我们\(C_k=\ ...

  4. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  5. Java基础及JavaWEB以及SSM框架学习笔记Xmind版

    Java基础及JavaWEB以及SSM框架学习笔记Xmind版 转行做程序员也1年多了,最近开始整理以前学习过程中记录的笔记,以及一些容易犯错的内容.现在分享给网友们.笔记共三部分. JavaSE 目 ...

  6. Netty学习笔记-入门版

    目录 Netty学习笔记 前言 什么是Netty IO基础 概念说明 IO简单介绍 用户空间与内核空间 进程(Process) 线程(thread) 程序和进程 进程切换 进程阻塞 文件描述符 文件句 ...

  7. 官方教程Stealth学习笔记(一)

    今天開始要更新官方教程stealth的学习笔记啦, 我将会记录和解说一个小游戏基本的流程和关键地方的技巧. 我会依照官方教程的顺序来更新.                                ...

  8. ASP.NET Core快速入门--学习笔记系列文章索引目录

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 抓住国庆假期的尾巴完成了此系列课程的学习笔记输出! ASP.NET Core快 ...

  9. Python快速入门学习笔记(二)

    注:本学习笔记参考了廖雪峰老师的Python学习教程,教程地址为:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb49318210 ...

随机推荐

  1. TCP协议三次握手与四次挥手通俗解析

    TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字 ...

  2. pycharm中的快捷键和简单设置

    PyCharm3.x默认快捷键 PyCharm Default Keymap 1.编辑(Editing) Ctrl + Space    基本的代码完成(类.方法.属性)Ctrl + Alt + Sp ...

  3. 201671010121 2016-2017-2《java程序设计》第一周学习总结

    之前学了些C语言,学的也不是太懂,还算能读懂一些简答的代码吧,我觉得这就是进步.刚步入大二,在计算机这个专业里不刻苦是不行的.但是,到我拿到Java书的时候,真心是吓住我了,好厚的一本书啊,不过在老师 ...

  4. .NET Core多平台开发体验[1]: Windows

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  5. fileZilla 设置 记录一笔 以防忘记

  6. django全文检索

    -------------------linux下配置操作1.在虚拟环境中依次安装包 1.pip install django-haystack haystack:django的一个包,可以方便地对m ...

  7. django源码解析一(请求处理流程)

    1.我们都知道WSGI是一个规范,规范了server和application之间通信的一些约束,server端在监听到请求之后,会把请求转给application去处理,他们之间关联起来的桥梁是一个e ...

  8. HTTPS静态服务搭建过程详解

    HTTPS服务对于一个前端开发者来说是一个天天打招呼的老伙计了,但是之前我跟HTTPS打交道的场景一直是抓包,自己没有亲自搭建过HTTPS服务,对HTTPS的底层知识也是一知半解.最近正好遇到一个用户 ...

  9. Word直接发布新浪博客(以Wo…

    原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...

  10. JavaScript 的使用基础总结③

    JavaScript 中的对象 JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... JavaScript 允许自定义对象. (一)数组 数组对象的作用是:使用单独的变量名来存储 ...