.Net Core 3.0 gRPC部署问题解决
前言
.net core3.0终于如约而至的来了。在3.0中增加了许多东西、也有了许多的变化。今天我们看的就是在3.0中使用grpc并遇到的问题。grpc现在可以非常方便简洁的在.net core中使用了,今天我也是尝试了一下,但是不幸了是遇到了一些阻碍。我们一起看看是啥问题吧。
grpc介绍
grpc 是google开源的一个高性能、跨语言的rpc框架,基于http2协议,采用protobuf 定义的idl。
优点:
- 现代高性能轻量级的rpc框架
- 协定优先 api 开发,默认使用协议缓冲区,允许与语言无关的实现
- 可以实现多语言的工具
- protobuf二进制序列化,性能好/效率高
- 基于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 可回收程序集加载上下文的实现
-
.Net Core 3.0开源可视化设计CMS内容管理系统建站系统
-
ASP.NET Core 1.0 部署 HTTPS(.NET Core 1.0)
-
ASP.NET Core部署前期准备 使用Hyper-V安装Ubuntu Server 16.10
-
win10下ASP.NET Core部署环境搭建步骤
-
ubuntu16.4下用jexus部署ASP.NET Core环境
-
.Net Core WebApi(二)在Windows服务器上部署
-
.Net Core 3.0 gRPC部署问题解决
-
asp.net core 3.0 更新简记
-
Linux下部署.net core环境的步骤详解