gRPC入門學習之旅(六)

来源:https://www.cnblogs.com/chillsrc/p/18132594
-Advertisement-
Play Games

JWT(JSON Web Token)是一種用於在網路應用之間傳遞信息的開放標準(RFC 7519)。它使用 JSON 對象在安全可靠的方式下傳遞信息,通常用於身份驗證和信息交換。 在Web API中,JWT通常用於對用戶進行身份驗證和授權。當用戶登錄成功後,伺服器會生成一個Token並返回給客戶端 ...


gRPC入門學習之旅(一) gRPC入門學習之旅(二) gRPC入門學習之旅(三) gRPC入門學習之旅(四) gRPC入門學習之旅(五)

 

3.3、客戶端編譯生成GRPC類

1. 在“解決方案資源管理器”中,使用滑鼠左鍵選中項目名稱“Demo.Grpc.Cmd”,然後單擊滑鼠右鍵,在彈出的快捷菜單中選擇“重新生成”菜單項。

2. 在“解決方案資源管理器”中,使用滑鼠左鍵選中項目名稱“Demo.Grpc.Cmd,在彈出的快捷菜單中選擇“在文件資源管理器中打開文件夾”菜單項。如下圖。

 

3.我們打開“文件資源管理器”,進入到Demo.Grpc.Cmd\obj\Debug\ net7.0目錄,發現此時目錄下也有與服務端一樣的4個.cs文件,就是GRPC協議文件對應的類文件,如下圖所示:

 

3.4、gRPC服務的https調用

1.在服務端項目(Demo.GrpcService)中,由Visual Studio 2022在創建項目時預設配置了兩個地址,讓我們來調用。2個地址分別為:http://localhost:5209https://localhost:7149, gRPC客戶端會使用到這2個地址,目的是給客戶端請求請求地址,服務端將監聽這兩個埠。

2. 在Visual Studio 2022的“解決方案資源管理器”中,使用滑鼠右鍵單擊“Demo.Grpc.Cmd”項目名稱,在彈出菜單中選擇“添加--> 類”。 在“添加新項”對話框中將類命名為 User,然後選擇“添加”。

3. 在Visual Studio 2022的“解決方案資源管理器”中,使用滑鼠雙擊打開剛纔創建的User.cs文件,添加如下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Demo.GrpcService.Protos;

namespace Demo.Grpc.Cmd
{
 
    public class User

    {

        public void GetUserInfo()
        {

            // 使用https
            const string urlHttps = "https://localhost:7149";

            using (var channel = GrpcChannel.ForAddress(urlHttps))
            {

                var client = new UserInfo.UserInfoClient(channel);

                UserInfoResult userInfo = client.GetUserInfo(new UserInfoRequest()
                {
                    UserName = "Admin",

                    Password = "12345"

                });

                //列印服務方法返回的結果
                Console.WriteLine($"{userInfo.UserName},{userInfo.Age},{userInfo.Name}");
                Console.WriteLine( JsonSerializer.Serialize(userInfo));
            }

           // return string.Empty;
           Console.ReadKey();

        }
    }
}

4. 在Visual Studio 2022的“解決方案資源管理器”中,使用滑鼠雙擊打開program.cs文件,添加如下代碼:

/ 、See https://aka.ms/new-console-template for more information

using Demo.Grpc.Cmd;


Console.WriteLine("Hello, World!"); 

new User().GetUserInfo();

5.我們在開啟一個Visual Studio 2022,打開“Demo.GrpcService”解決方案,將“Demo.GrpcService”設置為啟動項目,並使用https協議啟動運行。

 

6.啟動運行之後的結果如圖。

 

7.我們切換到“Demo.Grpc.Cmd”為啟動項目Visual Studio 2022,按F5,啟動。

 

8.啟動之後的運行結果,如圖。

 

到此,調用gRPC服務端提供的https地址就成功了。

3.5、gRPC服務的http調用

相比https的調用,我們只需要在調用前加上如下代碼即可:

 

AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

1. 在Visual Studio 2022的“解決方案資源管理器”中,使用滑鼠雙擊打開User.cs文件,添加如下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Grpc.Net.Client;
using Demo.GrpcService.Protos;

namespace Demo.Grpc.Cmd
{
    public class User
    {

        public void GetUserInfo()
        {
            //使用http
            AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            const string urlHttp = "http://localhost:5209";
 
            using (var channel = GrpcChannel.ForAddress(urlHttp))
                // 使用https
               // const string urlHttps = "https://localhost:7149";
           // using (var channel = GrpcChannel.ForAddress(urlHttps))
            {

                var client = new UserInfo.UserInfoClient(channel);

                UserInfoResult userInfo = client.GetUserInfo(new UserInfoRequest()
                {
                    UserName = "Admin",
                    Password = "12345"

                });


                //列印服務方法返回的結果
                Console.WriteLine($"{userInfo.UserName},{userInfo.Age},{userInfo.Name}");
                Console.WriteLine( JsonSerializer.Serialize(userInfo));
            }

           // return string.Empty;
           Console.ReadKey();
        }
    }
}

2.在目Visual Studio 2022,按F5或是點擊工具欄上的“運行”按鈕,啟動“Demo.Grpc.Cmd”控制台程式。

 

到此,調用gRPC服務端提供的http地址就成功了。

運行效果如下:

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近自己做了個 Falsk 小項目,在部署上伺服器的時候,發現雖然不乏相關教程,但大多都是將自己項目代碼複製出來,不講核心邏輯,不太簡潔,於是將自己部署的經驗寫成內容分享出來。 uWSGI 簡介 uWSGI: 一種實現了多種協議(包括 uwsgi、http)並能提供伺服器搭建功能的 Pytho ...
  • 初識STL STL,(Standard Template Library),即"標準模板庫",由惠普實驗室開發,STL中提供了非常多對信息學奧賽很有用的東西。 vector vetor是STL中的一個容器,可以看作一個不定長的數組,其基本形式為: vector<數據類型> 名字; 如: vector ...
  • 拓展閱讀 資料庫設計工具-08-概覽 資料庫設計工具-08-powerdesigner 資料庫設計工具-09-mysql workbench 資料庫設計工具-10-dbdesign 資料庫設計工具-11-dbeaver 資料庫設計工具-12-pgmodeler 資料庫設計工具-13-erdplus ...
  • .NET 部署 IIS 的簡單步驟一: 下載 dotnet-hosting-x.y.z-win.exe ,下載地址:.NET Downloads (Linux, macOS, and Windows) (microsoft.com) .NET 部署 IIS 的簡單步驟二: 選擇對應的版本,點擊進入詳 ...
  • 在處理大型Excel工作簿時,有時候我們需要在工作表中凍結窗格,這樣可以在滾動查看數據的同時保持某些行或列固定不動。凍結窗格可以幫助我們更容易地導航和理解複雜的數據集。相反,當你不需要凍結窗格時,你可能需要解凍它們以獲得完整的視野。 下麵將介紹如何使用免費.NET庫通過C#實現凍結Excel視窗以鎖 ...
  • 在 Avalonia 中,樣式是定義控制項外觀的一種方式,而控制項主題則是一組樣式和資源,用於定義應用程式的整體外觀和感覺。本文將深入探討這些概念,並提供示例代碼以幫助您更好地理解它們。 樣式是什麼? 樣式是一組屬性,用於定義控制項的外觀。它們可以包括背景色、邊框、字體樣式等。在 Avalonia 中,樣 ...
  • 引言 上一篇我們創建了一個Sample.Api項目和Sample.Repository,並且帶大家熟悉了一下Moq的概念,這一章我們來實戰一下在xUnit項目使用依賴註入。 Xunit.DependencyInjection Xunit.DependencyInjection 是一個用於 xUnit ...
  • 老周在幾個世紀前曾寫過樹莓派相關的 iOT 水文,之所以沒寫 Nano Framework 相關的內容,是因為那時候這貨還不成熟,可玩性不高。不過,這貨現在已經相對完善,老周都把它用在項目上了——第一個是自製的智能插座,這個某寶上50多塊可以買到,搜“esp32 插座”就能找到。一種是 86 型盒子 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...