前言
.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進行連接,證書的問題也就是在開發環境時出現解決,在正式生產環境中我們還是需要使用有效證書的,
平凡人生要用平凡的心去對待,你的人生將會更精彩,
歡迎大家掃描下方二維碼,和學習了解更多的知識吧!

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/114298.html
標籤:.NET Core
上一篇:.NET Core簡介
