a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

WPF利用RPC調(diào)用其他進(jìn)程的方法詳解

2019-10-29 21:01:52
字體:
供稿:網(wǎng)友

前言

如果在 WPF 需要用多進(jìn)程通信,一個(gè)推薦的方法是 WCF ,因?yàn)?WCF 是 RPC 計(jì)算。先來講下 RPC (Remote Procedure Call) 遠(yuǎn)程過程調(diào)用,他是通過特定協(xié)議,包括 tcp 、http 等對(duì)其他進(jìn)程進(jìn)行調(diào)用的技術(shù)。詳細(xì)請(qǐng)看百度

現(xiàn)在不會(huì)告訴大家如何使用 WCF ,下面講的是使用 remoting 這個(gè)方法。需要知道 dotnet remoting 是已經(jīng)過時(shí)的技術(shù),建議使用 wcf 但是 wcf 部署難度比較高,對(duì)于性能要求比較高或想快速使用,建議使用 remoting 。使用方法很簡單

首先創(chuàng)建三個(gè)工程,一個(gè)工程放其他兩個(gè)需要使用的庫,一個(gè)是服務(wù)端,一個(gè)是客戶端。其中客戶端就可以調(diào)用服務(wù)端,客戶端和服務(wù)端是兩個(gè)不同的進(jìn)程,所以可以跨進(jìn)程調(diào)用。

方法如下:

先創(chuàng)建一個(gè)簡單的工程,庫的工程 RemoteObject ,里面只有一個(gè)類

 public class RemoteCalculator : MarshalByRefObject {  public const int Port = 13570;  public int Add(int a, int b)  {   return a + b;  } }

注意這個(gè)類需要繼承 MarshalByRefObject ,這個(gè)類是在兩個(gè)進(jìn)程引用,客戶端不實(shí)現(xiàn)這個(gè)類,所以客戶端使用這個(gè)類接口同樣可以。具體調(diào)用這個(gè)類的方法在服務(wù)端運(yùn)行,結(jié)果通過 tcp 或 http 返回。

客戶端的主要代碼是連接服務(wù)端,然后訪問庫的 add 函數(shù),但是這個(gè)函數(shù)不在客戶端運(yùn)行,通過 tcp 調(diào)用服務(wù)端,讓他運(yùn)行。

  private void ButtonBase_OnClick(object sender, RoutedEventArgs e)  {   if (_channel == null)   {    Process.Start("CalcnsMnlhzydYeuiitcCddhxvlhm.exe");    _channel = new TcpChannel();    ChannelServices.RegisterChannel(_channel, true);   }   var calculator = (RemoteCalculator) Activator.GetObject(typeof(RemoteCalculator),    "tcp://" + "127.0.0.1" + ":" + RemoteCalculator.Port + "/RemoteCalculator");   Console.WriteLine(calculator.Add(1, 2));  }

服務(wù)端的名稱是 CalcnsMnlhzydYeuiitcCddhxvlhm ,主要是打開連接,執(zhí)行客戶端發(fā)過來的函數(shù)

  static void Main(string[] args)  {   new Thread(() =>   {    _channel = new TcpChannel(RemoteCalculator.Port);    ChannelServices.RegisterChannel(_channel, true);    RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteCalculator), "RemoteCalculator", WellKnownObjectMode.Singleton);   }).Start();   while (true)   {    Console.ReadKey();   }  }  private static TcpChannel _channel;

需要注意,客戶端點(diǎn)擊按鈕需要先打開服務(wù)端,使用這個(gè)代碼Process.Start("CalcnsMnlhzydYeuiitcCddhxvlhm.exe");然后創(chuàng)建 tcp 告訴通過tcp和服務(wù)端連接。然后從服務(wù)端獲得 calculator 這個(gè)類,實(shí)際這個(gè)類現(xiàn)在是沒有實(shí)現(xiàn),調(diào)用函數(shù)需要發(fā)送到服務(wù)端。

服務(wù)端需要打開 TcpChannel ,這時(shí)需要定義調(diào)用的類,RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteCalculator), "RemoteCalculator", WellKnownObjectMode.Singleton); ,這個(gè)函數(shù)的一個(gè)參數(shù)就是注冊的類,第二個(gè)函數(shù)是調(diào)用的這個(gè)類使用什么名稱,一般都是使用類的名稱,最后一個(gè)參數(shù)可以在一個(gè)連接給一個(gè)實(shí)例。所以在庫的類不能在構(gòu)造函數(shù)需要傳入

客戶端調(diào)用的"tcp://" + "127.0.0.1" + ":" + RemoteCalculator.Port + "/RemoteCalculator"最后一個(gè)RemoteCalculator就是服務(wù)端注冊的第二個(gè)函數(shù)。

那么這個(gè)功能的作用是什么?因?yàn)?x64 程序不能調(diào)用 x86 的庫,所以可以用這個(gè)方法在 x64 的程序調(diào)用其他平臺(tái)的庫,因?yàn)檫M(jìn)程運(yùn)行的平臺(tái)不一樣,但是通信是相同。

其他的功能我沒有使用,我就使用打開服務(wù),調(diào)用他的函數(shù),所以如果大家遇到問題,不要來問我。如果按照我的代碼無法運(yùn)行,可以發(fā)郵件給我,我發(fā)源代碼給你

代碼下載:點(diǎn)擊這里

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到c#教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久成人网 | 视频一区在线播放 | 国产综合久久 | 日韩在线你懂的 | 亚洲精品久久久 | 午夜黄色av | 国产精品久久久久久久久久妞妞 | 有码在线 | 精品久| 91精品国产综合久久久久久漫画 | 亚洲成人av在线 | 黄色在线免费观看 | 中文字幕在线电影 | 亚洲一区二区精品视频 | 国产一区二区三区在线 | 国产精品日本一区二区不卡视频 | 综合精品久久久 | wwwjizz日本 | 久久久久久久国产 | 视频精品一区二区三区 | 亚洲高清久久 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品美女久久久久久免费 | 久久99深爱久久99精品 | 色网站在线观看 | 在线干| 国产乱人伦av在线a 久久精品视 | 久久久国产精品入口麻豆 | 亚洲黄色性视频 | 免费黄色福利视频 | 伊人干 | 午夜电影网站 | 97av在线 | 久久久美女 | 青青草免费在线视频 | 成人午夜精品一区二区三区 | 影音先锋中文字幕在线 | 午夜免费剧场 | 成人高清视频在线观看 | 天天草影院 | 一本大道综合伊人精品热热 |