前言

  .Net Core3.0终于如约而至的来了。在3.0中增加了许多东西、也有了许多的变化。今天我们看的就是在3.0中使用gRPC并遇到的问题。gRPC现在可以非常方便简洁的在.Net Core中使用了,今天我也是尝试了一下,但是不幸了是遇到了一些阻碍。我们一起看看是啥问题吧。

gRPC介绍

  gRPC 是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL。

  优点:

    1. 现代高性能轻量级的RPC框架
    2. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现
    3. 可以实现多语言的工具
    4. protobuf二进制序列化,性能好/效率高
    5. 基于Http2.0

  在ASP.NET Core 3.0中使用gRPC也有许多文章进行了介绍,我也是看了这些文章进行的学习。大家也是可以自行去查找的。

部署问题

  按照在ASP.NET Core 3.0中使用gRPC的文章中的教程一步一步的创建项目,编写代码。一套流程走下来那是行云流水。编写完之后在本地就开始进行测试。先跑起来服务端。在跑客户端。看到客户端上的消息返回。成功了。第一次就成功,果然是更加简单了。其中有两点需要注意的是因为在3.0中使用的gRPC是基于Http2.0的。而它又需要HTTPS,尽管说没有明确规定必须使用HTTPS,但是为了安全在浏览器实现上都要求了HTTPS,所以现在的HTTP/2和HTTPS基本都是一对。

  所以我们在本地运行的时候会出现一个弹框,询问我们是否信任证书。下面我的问题也就和这个有关了。本地运行一切正常。我就想搬到服务器上去试试看行不行。结果接过上去服务端是跑起来了,结果客户端运行起来就报错了。

Unhandled exception. System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.

 ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

解决方案

1、修改https为http(不行、大错特错)

  这个报错我就有点纳闷了,我首先检查环境,发现都是对的。就有点纳闷了。然后看是连接失败。我就尝试修改https为http。结果还是错误的。这个方法就被抛弃了。(修改之后会导致客户端和服务端的SSL/TLS 配置不匹配。.Net Core客户端必须在https服务器地址中使用才能正确的使用安全连接)

2、信任证书(可行)

  仔细查看错误,发现最后标明是证书无效。这是想起我们在本地第一次运行的时候弹窗提示我们是否信任证书。好像就是这个关系了。照这个路子想下去。找到在如何安装 ASP.NET Core HTTPS 开发证书。然后我们再试试、果然就可以了。

dotnet dev-certs https --trust

3、忽略无效证书(可行)

  后面又发现了一种解决方案,既然是证书无效导致的问题,那么忽略无效证书是不是可以呢?然后我们换一台服务器,继续尝试一下。在代码中加上忽略无效证书的代码。然后再次进行尝试发现也是可以的。不过这里需要注意的是这个忽略无效证书在开发过程中使用即可,换到生产环境还是替换成有效证书

        var httpClientHandler = new HttpClientHandler();
// Return `true` to allow certificates that are untrusted/invalid
httpClientHandler.ServerCertificateCustomValidationCallback =
      HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;
var httpClient = new HttpClient(httpClientHandler); var channel = GrpcChannel.ForAddress("https://localhost:5001",new GrpcChannelOptions { HttpClient = httpClient });
var client = new Greeter.GreeterClient(channel);

总结

  在我们使用在.Net Core 3.0中使用gRPC的时候,需要注意的时候保持客户端和服务端的SSL/TLS配置的匹配,基于HTTP2.0,使用https进行连接。证书的问题也就是在开发环境时出现解决,在正式生产环境中我们还是需要使用有效证书的。


    平凡人生要用平凡的心去对待,你的人生将会更精彩。 

  欢迎大家扫描下方二维码,和学习了解更多的知识吧!

  

.Net Core 3.0 gRPC部署问题解决的更多相关文章

  1. ASP.NET Core 3.0 gRPC 双向流

    目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 认证授权 一.前言 在前一文 <ASP.NE ...

  2. ASP.NET Core 3.0 gRPC 拦截器

    目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 拦截器 一. 前言 前面两篇文章给大家介绍了使用g ...

  3. ASP.NET Core 3.0 gRPC 身份认证和授权

    一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...

  4. asp.net core 3.0 gRPC框架小试

    什么是gRPC gRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优 ...

  5. ASP.NET Core 3.0 gRPC 配置使用HTTP

    前言 gRPC是基于http/2,是同时支持https和http协议的,我们在gRPC实际使用中,在内网通讯场景下,更多的是走http协议,达到更高的效率,下面介绍如何在 .NET Core 3.0 ...

  6. ASP.NET Core 2.0发布/部署到Ubuntu服务器并配置Nginx反向代理

    原文链接https://www.linuxidc.com/Linux/2017-12/149557.htm ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用AS ...

  7. dotnet core 3.0 linux 部署小贴士

    dotnet core 3.0 目前还是测试版,在linux下安装 sdk 需要有一些注意事项 1.下载url https://dotnet.microsoft.com/download/thank- ...

  8. .net core 2.0 webapi部署iis操作

    1.安装 .net core 2.0 runtime, (dotnet-runtime-2.0.7-win-x64.exe) https://www.microsoft.com/net/downloa ...

  9. Centos 7 ASP.NET Core 1.0 Docker部署

    先决条件 64位,内核3.10以上,查看当前的内核版本,打开一个终端使用uname -r显示您的内核版本             安装 sudo yum update     sudo tee /et ...

随机推荐

  1. keras+ ctpn 原理流程图

  2. Python-demo(photo)

    import osimport urllib import requests#import wximport time from fake_useragent import UserAgentfrom ...

  3. Http协议4个新的http状态码:428、429、431、511;

    1.428 Precondition Required (要求先决条件) 先决条件是客户端发送 HTTP 请求时,必须要满足的一些预设条件.一个好的例子就是 If-None-Match 头,经常用在 ...

  4. UGUI的图集处理方式-SpriteAtlas的前世今生

    最糟糕的是人们在生活中经常受到错误志向的阻碍而不自知,真到摆脱了那些阻碍时才能明白过来. —— 歌德 说到UGUI的图集初学者可能觉得没什么难度,包括我刚开始接触的时候也是,甚至你在开发的时候只需要把 ...

  5. C语言打印图形

    //输出图形 * * * * * * * * * * * * * * * * * * * * * * * * * //每行5个* void test1(){ //    外层负责行,外层执行一次,内层 ...

  6. FEL,项目实装记录

    FEL,即Fast EL ,版本0.8,具体内容我就不贴了,自行百度 实装遇到的问题: Spring Boot 打包后无法进行表达式编译. 根据百度以及源码,确定这东西是在用JavaCompiler将 ...

  7. DEVOPS基础

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/agile-development.html#tab-id-7 DevOps是一组过程. ...

  8. 【管理学】SMART

  9. Badboy参数化 - Add Variable(循环使用不同的关键字进行搜索)

    参考: http://leafwf.blog.51cto.com/872759/1113716 http://www.51testing.com/html/00/130600-1367743.html ...

  10. codeforces 402 D. Upgrading Array(数论+贪心)

    题目链接:http://codeforces.com/contest/402/problem/D 题意:给出一个a串和素数串b .f(1) = 0; p为s的最小素因子如果p不属于b , 否则 . a ...