当前位置: 移动技术网 > IT编程>开发语言>.net > .Net Core 3.0 gRPC部署问题解决

.Net Core 3.0 gRPC部署问题解决

2019年09月26日  | 移动技术网IT编程  | 我要评论

车牌防拍剂,广西摩托大军返乡,64.71.187.35

前言

  .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进行连接。证书的问题也就是在开发环境时出现解决,在正式生产环境中我们还是需要使用有效证书的。


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

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

  

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网