最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析C#封裝GRPC類庫(kù)及調(diào)用簡(jiǎn)單實(shí)例

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

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

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

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

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

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

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

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)生成解決方案。在下圖路徑得到自動(dòng)生成的兩個(gè)類。

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

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

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

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

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

對(duì)于不同的項(xiàng)目,在客戶端請(qǐng)求時(shí),服務(wù)端要根據(jù)自身情況回復(fù)想回的內(nèi)容,因此可以提供一個(gè)委托供外部自行開發(fā)回復(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ù)端回復(fù)委托
        public static Func<string, string> ReplyMes;

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

        // 服務(wù)端啟動(dòng)
        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();
        }

        // 客戶端啟動(dòng)
        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中可以得到項(xiàng)目的dll文件GrpcLink.dll,其他項(xiàng)目可以引用使用了。

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

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

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

 窗體:

窗體代碼:

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項(xiàng)目。

 窗體:

窗體代碼:

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)運(yùn)行兩個(gè)項(xiàng)目進(jìn)行測(cè)試。

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

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

點(diǎn)擊發(fā)送:

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

相關(guān)文章

  • XAML如何獲取元素的位置

    XAML如何獲取元素的位置

    這篇文章主要為大家詳細(xì)介紹了XAML如何獲取元素的位置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#泛型概念的簡(jiǎn)介與泛型的使用

    C#泛型概念的簡(jiǎn)介與泛型的使用

    今天小編就為大家分享一篇關(guān)于C#泛型概念的簡(jiǎn)介與泛型的使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • C#使用BackgroundWorker控件

    C#使用BackgroundWorker控件

    這篇文章介紹了C#使用BackgroundWorker控件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • C# Helper開發(fā)一個(gè)簡(jiǎn)單的端口監(jiān)控工具

    C# Helper開發(fā)一個(gè)簡(jiǎn)單的端口監(jiān)控工具

    C# 端口監(jiān)控 Helper 是一款基于C#語(yǔ)言的工具,這個(gè)意義在于幫助開發(fā)者快速實(shí)現(xiàn)對(duì)指定端口的監(jiān)控,以保障(觀察)網(wǎng)絡(luò)服務(wù)的正常運(yùn)行,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2025-09-09
  • unity 如何獲取Text組件里text內(nèi)容的長(zhǎng)度

    unity 如何獲取Text組件里text內(nèi)容的長(zhǎng)度

    這篇文章主要介紹了unity 獲取Text組件里text內(nèi)容的長(zhǎng)度操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C#?DLL跨語(yǔ)言調(diào)用的兩種實(shí)現(xiàn)方法

    C#?DLL跨語(yǔ)言調(diào)用的兩種實(shí)現(xiàn)方法

    這篇文章主要介紹了如何編寫能被其他編程語(yǔ)言調(diào)用的C#?DLL,包括兩種主流方式:通過(guò)COM接口或P/Invoke封裝非托管導(dǎo)出函數(shù),重點(diǎn)在于讓C#?DLL符合跨語(yǔ)言調(diào)用的標(biāo)準(zhǔn),包括數(shù)據(jù)類型兼容性、框架選擇和錯(cuò)誤處理等關(guān)鍵要點(diǎn),需要的朋友可以參考下
    2026-03-03
  • C#實(shí)現(xiàn)窗體中動(dòng)態(tài)按鈕的設(shè)計(jì)方法

    C#實(shí)現(xiàn)窗體中動(dòng)態(tài)按鈕的設(shè)計(jì)方法

    在窗體界面中,通常以按鈕來(lái)代替菜單欄的功能,這種形式雖然給用戶一種直觀、界面風(fēng)格各異的感覺(jué),但通常按鈕都是以靜止的形式顯示,所以本文給大家介紹了C#實(shí)現(xiàn)窗體中動(dòng)態(tài)按鈕的設(shè)計(jì)方法,感興趣的朋友可以參考下
    2024-04-04
  • C#中的HttpWebRequest類介紹

    C#中的HttpWebRequest類介紹

    本文詳細(xì)講解了C#中的HttpWebRequest類,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C#控制臺(tái)帶參數(shù)程序源碼編寫實(shí)例講解

    C#控制臺(tái)帶參數(shù)程序源碼編寫實(shí)例講解

    像ipconfig /all 這樣的CMD命令想必大家都知道,但是很多童鞋可能不知道怎么寫這樣的控制臺(tái)帶參數(shù)的程序,需要的朋友可以了解下
    2012-12-12
  • 在C#?WebAPI中實(shí)現(xiàn)多版本控制的方法

    在C#?WebAPI中實(shí)現(xiàn)多版本控制的方法

    隨著應(yīng)用程序的不斷演化和功能的不斷擴(kuò)展,API?版本控制成為了開發(fā)和維護(hù)?WebAPI?時(shí)不可或缺的一部分,在本文中,我們將介紹如何在現(xiàn)代?C#?WebAPI?項(xiàng)目中有效地實(shí)施?API?版本控制,并分享一些最佳實(shí)踐,需要的朋友可以參考下
    2025-11-11

最新評(píng)論

应城市| 高淳县| 尚义县| 鸡泽县| 肇庆市| 砀山县| 伊通| 铜梁县| 金湖县| 五莲县| 广灵县| 巴中市| 格尔木市| 绥江县| 寿宁县| 荥阳市| 泾阳县| 平凉市| 南平市| 都江堰市| 青田县| 临武县| 囊谦县| 右玉县| 周宁县| 稷山县| 瑞金市| 沈丘县| 双峰县| 鄱阳县| 临颍县| 津市市| 珠海市| 平陆县| 金沙县| 涟水县| 高雄市| 怀柔区| 孝感市| 五原县| 英吉沙县|