gRPC入門學習之旅(六)

DotNet菜园發表於2024-04-13
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地址就成功了。

執行效果如下:

相關文章