gRpc 官网  链接

新建服务端项目

在服务端内先编写一个 .proto 文件

greet.proto

syntax = "proto3";

service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
} message HelloRequest {
string name = ;
} message HelloReply {
string message = ;
}

服务端生成 .proto 代码为 C#   NutGet Install-Package Grpc.Tools

 

找到tools 从里面选择自己电脑的版本

把 protoc.exe 、 grpc_csharp_plugin.exe 复制出来和 .proto 文件放在一起

编写一个 .cmd 文件和 .proto 文件放在一起,插入生成代码的指令。(注意 greet.proto 这是 .proto 文件名)

protoc -I . --csharp_out . --grpc_out . --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe greet.proto   

点击cmd 生成 会获得两个C#文件。

新建类GreeterService

并在使用客户端之前启动(启动服务端之前,要先排除与.Net 无关的.proto文件,不然直接运行会报错的)

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)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}  
}
class Program
{ const int Port = ; static void Main(string[] args)
{
Server server = new Server
   {
Services = { Greeter.BindService(new GreeterService()) },
Ports = { new ServerPort("127.0.0.1", , ServerCredentials.Insecure) }
};
server.Start();
Console.WriteLine("127.0.0.1");
Console.WriteLine("GrpcService server listening on port " + Port);
Console.WriteLine("任意键退出...");
Console.ReadKey();
}
}

新建控制台客户端项目

客户端调用服务端

namespace gRPCClient
{
class Program
{
static void Main(string[] args)
{ // The port number(5001) must match the port of the gRPC server.
Channel channel = new Channel("127.0.0.1", , ChannelCredentials.Insecure);
var client = new Greeter.GreeterClient(channel).WithHost("127.0.0.1"); try
{
var reply = client.SayHelloAsync(new HelloRequest { Name = "Zhang San" });
Console.WriteLine("来自" + reply.ResponseAsync.Result); channel.ShutdownAsync().Wait();
Console.WriteLine("Greeting: " + reply.ResponseAsync.Result);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
catch (Exception ex)
{ throw ex;
} }
}
}

gRPC搭建使用方式的更多相关文章

  1. Linux系统——搭建FTP方式的本地定制化Yum仓库

    (1)搭建公网源yum仓库 安装wget aliyun源 # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epe ...

  2. 跟我一起学Go系列:Go gRPC 安全认证方式-Token和自定义认证

    Go gRPC 系列: 跟我一起学Go系列:gRPC安全认证机制-SSL/TLS认证 跟我一起学 Go 系列:gRPC 拦截器使用 跟我一起学 Go 系列:gRPC 入门必备 接上一篇继续讲 gRPC ...

  3. TensorFlow搭建模型方式总结

    引言 TensorFlow提供了多种API,使得入门者和专家可以根据自己的需求选择不同的API搭建模型. 基于Keras Sequential API搭建模型 Sequential适用于线性堆叠的方式 ...

  4. 使用gRPC搭建Server端与Client端

    gRPC简介 gRPC是一种RPC框架技术,采用Protocal Buffers(协议缓存) 作为其接口定义的语言(就是Proto来写接口)和基础的消息交换格式. 在gRPC中,客户端应用程序可以直接 ...

  5. CAS环境搭建-证书方式(https连接)

    一.教程前言 1 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 2 单点登录(SSO):请看<CAS简介> 3 本教程使用的SSO服务器是Yelu大学研发的CAS(Cen ...

  6. springboot的maven多模块项目架构微服务搭建——依赖方式的多模块演化为微服务项目

    在上一篇依赖方式多模块的基础上对项目进行改造.主要改造user-service项目,service要配置mapper.mybatis及数据库相关的东西,后面的接口消费方user就不再需要了 注意:以下 ...

  7. .NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端

    .NET Core love gRPC 千呼万唤的 .NET Core 3.0 终于在 9 月份正式发布,在它的众多新特性中,除了性能得到了大大提高,比较受关注的应该是 ASP.NET Core 3. ...

  8. 【网络安全】window 快速搭建 ftp 及 多种访问方式

    在局域网里面使用ftp传输文件比使用qq等软件传输速度快很多,但是搭建ftp很多时候需要下载相应的支持软件,其实不必下载相关的软件,因为window自带ftp功能. 演示操作系统:windows10 ...

  9. GRpc添加客户端的四种方式

    随着微服务的发展,相信越来越多的.net人员也开始接触GRpc这门技术,大家生成GRpc客户端的方式也各不相同,今天给大家介绍一下依据Proto文件生成Rpc客户端的四种方式 前提:需要安装4个Nug ...

随机推荐

  1. Mavn 项目 引入第三方jar包 导致ClassNotFoundException

    案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...

  2. 如何获取 C# 类中发生数据变化的属性信息

    一.前言 在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字 ...

  3. Springboot+SpringSecurity实现图片验证码登录问题

    这个问题,网上找了好多,结果代码都不全,找了好多,要不是就自动注入的类注入不了,编译报错,要不异常捕获不了浪费好多时间,就觉得,框架不熟就不能随便用,全是坑,气死我了,最后改了两天.终于弄好啦; 问题 ...

  4. abp vnext2.0核心组件之领域实体组件源码解析

    接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析集合.Net Core3.1,基本环境已经完备, ...

  5. c++中静态成员函数

    静态成员函数 静态成函数和静态成员数据相同,他们都属于某一个类的静态成员而不是某一个对象的成员. 静态数据成员的使用方法和注意事项 1.静态数据成员在定义或说明时前面加上关键字static 2.初始化 ...

  6. java-zhisji

    1. int indexOf(int ch):用来检查给定的一个字符在当前字符串中第一次出现的下标位置.这里的下标和数组的下标意思相近,0表示该字符串的第1个字符,以此类推.当该字符串中并不     ...

  7. Windows下查看dll被哪个进程调用

    卸载程序,结果没卸载干净---程序的安装目录中还剩下一个dll文件.想删,结果系统提示说dll文件被某个进程占用了,不让删. 先前碰到这种做法,我都是直接使用unlocker先unlock一下,然后删 ...

  8. Jenkins report 打开样式失败解决方案

    1.临时解决方案(重启Jenkins失效):在系统管理->脚本命令行: 执行: System.setProperty("hudson.model.DirectoryBrowserSup ...

  9. HDU_2167_状态压缩dp

    http://acm.hdu.edu.cn/showproblem.php?pid=2167 第一道状态压缩dp,其实就是爆搜,只不过把排除了大量不可能的情况,先用sta保存每行可能的情况,sum[i ...

  10. 如何在windows10家庭版上搭建docker

    如何在windows10家庭版上搭建docker 建议先跳到最后一条,看完之后再决定是否安装. 0X00搭建原因 首先搭docker的想法是我在复现漏洞时候,发现大佬们的复现环境都是基于docker的 ...