亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析C#封裝GRPC類庫及調(diào)用簡單實例

 更新時間:2024年04月11日 08:42:32   作者:wtc87  
這篇文章主要為大家詳細介紹了C#中封裝GRPC類庫及調(diào)用簡單實例的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

一個簡單的C#實例。包括:GRPC文件的創(chuàng)建生成、服務(wù)端和客戶端函數(shù)類庫的封裝、創(chuàng)建服務(wù)端和客戶端調(diào)用測試。若有錯誤或更好的方法還請指正。

1、創(chuàng)建并生成GRPC服務(wù)文件

(1)打開vs2022,創(chuàng)建新項目控制臺應用(其他應用好像不行)。

(2)需要安裝三個nuget包,如圖:

(3)項目添加新建項,選擇類,修改名稱為Link.proto,添加后把內(nèi)容全部刪除。

(4)添加如下代碼。測試實例為服務(wù)端和客戶端傳輸字符串消息,所以博主只定義了一個方法(客戶端調(diào)用,服務(wù)端重寫),傳輸內(nèi)容包括請求字符串和回復字符串。此處可自行定義。

proto

syntax = "proto3";

option csharp_namespace = "LinkService";

service Link
{
	rpc GetMessage(Mes) returns (Mes);
}

message Mes
{
	string StrRequest = 1;
	string StrReply = 2;
}

(5)右鍵Link.proto文件選擇屬性,生成操作選擇如圖:

(6)生成解決方案。在下圖路徑得到自動生成的兩個類。

至此,獲得GRPC服務(wù)需要的三個文件:Link.proto、Link.cs、LinkGrpc.cs??梢詫⑦@三個文件放在一個項目中直接使用,需要重寫一下服務(wù)端方法、創(chuàng)建服務(wù)端和客戶端的啟動方法。但是如果不同的項目軟件之間通訊需要各自如此開發(fā)??梢韵确庋b成一個GRPC類庫供其他項目直接調(diào)用。

2、服務(wù)端和客戶端函數(shù)類庫的封裝

(1)vs2022創(chuàng)建類庫(.NET Framework)項目。

項目添加現(xiàn)有項,上面獲得的三個文件。安裝nuget包:Grpc.Core和Google.Protobuf。

(2)此處創(chuàng)建兩個類:LinkFunc用于放此類庫可用于外部引用調(diào)用的方法。LinkServerFunc基于Link.LinkBase,用于重寫在proto文件中定義的方法。

對于不同的項目,在客戶端請求時,服務(wù)端要根據(jù)自身情況回復想回的內(nèi)容,因此可以提供一個委托供外部自行開發(fā)回復函數(shù)。

在LinkFunc類中定義如下:

public static Func<string, string> ReplyMes;

1)在LinkServerFunc類重寫GetMessage方法如下:

LinkServerFunc

 using Grpc.Core;
using LinkService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static LinkService.Link;

namespace GrpcLink
{
    public class LinkServerFunc : LinkBase
    {
        public override Task<Mes> GetMessage(Mes request, ServerCallContext context)
        {
            Mes mes = new Mes();
            mes.StrReply = LinkFunc.ReplyMes(request.StrRequest);
            return Task.FromResult(mes);
        }
    }
}

2)開始寫LinkFunc類。

LinkFunc

 using Grpc.Core;
using LinkService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
using static LinkService.Link;

namespace GrpcLink
{
    public class LinkFunc
    {
        // 用于服務(wù)端回復委托
        public static Func<string, string> ReplyMes;

        // 定義服務(wù)端和客戶端
        public static Server LinkServer;
        public static LinkClient LinkClient;

        // 服務(wù)端啟動
        public static void LinkServerStart(string host, int port)
        {
            LinkServer = new Server
            {
                Services =
                    {
                        BindService(new LinkServerFunc())
                    },
                Ports = { new ServerPort(host, port, ServerCredentials.Insecure) }
            };
            LinkServer.Start();
        }

        // 服務(wù)端關(guān)閉
        public static void LinkServerClose()
        {
            LinkServer?.ShutdownAsync().Wait();
        }

        // 客戶端啟動
        public static void LinkClientStart(string strIp)
        {
            Channel prechannel = new Channel(strIp, ChannelCredentials.Insecure);
            LinkClient = new LinkClient(prechannel);
        }

        // 客戶端發(fā)送消息函數(shù)
        public static string SendMes(string strRequest)
        {
            Mes mes = new Mes();
            mes.StrRequest = strRequest;
            var res = LinkClient.GetMessage(mes);
            return res.StrReply;
        }
    }
}

(3)生成解決方案。Debug中可以得到項目的dll文件GrpcLink.dll,其他項目可以引用使用了。

 3、創(chuàng)建服務(wù)端和客戶端調(diào)用測試

(1)vs2022創(chuàng)建兩個Windows窗體應用(.NET Framework)項目。將上述GrpcLink.dll文件分別放入兩個項目中,并添加dll引用。安裝nuget包:Grpc.Core和Google.Protobuf。

(2)服務(wù)端TestServer項目。

 窗體:

窗體代碼:

TestServer

 using GrpcLink;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestServer
{
    public partial class FormServer : Form
    {
        public FormServer()
        {
            InitializeComponent();
            LinkFunc.LinkServerStart("127.0.0.1", 9008);
            LinkFunc.ReplyMes = ReplyMes;
        }

        public string ReplyMes(string strRequest)
        {
            Invoke(new Action(() => { tbReply.Text = strRequest; }));
            
            string reply = tbRequest.Text;
            return reply;
        }
    }
}

 (3)客戶端TestCilent項目。

 窗體:

窗體代碼:

TestCilent

 using GrpcLink;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestCilent
{
    public partial class FormCilent : Form
    {
        public FormCilent()
        {
            InitializeComponent();
            LinkFunc.LinkClientStart("127.0.0.1:9008");
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string strmes = tbRequest.Text;
            string strres = LinkFunc.SendMes(strmes);
            tbReply.Text = strres;
        }
    }
}

 (4)運行兩個項目進行測試。

在客戶端的發(fā)送區(qū)輸入要發(fā)送的內(nèi)容。

在服務(wù)端的回復區(qū)輸入要回復的內(nèi)容。

點擊發(fā)送:

到此這篇關(guān)于淺析C#封裝GRPC類庫及調(diào)用簡單實例的文章就介紹到這了,更多相關(guān)C#封裝GRPC類庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論