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

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

 更新時(shí)間:2018年05月19日 15:57:41   作者:lindexi  
這篇文章主要給大家介紹了關(guān)于WPF利用RPC調(diào)用其他進(jìn)程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

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

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

方法如下:

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

 public class RemoteCalculator : MarshalByRefObject
 {
  public const int Port = 13570;

  public int Add(int a, int b)
  {
   return a + b;
  }
 }

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

客戶端的主要代碼是連接服務(wù)端,然后訪問庫的 add 函數(shù),但是這個函數(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ù)端,使用這個代碼Process.Start("CalcnsMnlhzydYeuiitcCddhxvlhm.exe");然后創(chuàng)建 tcp 告訴通過tcp和服務(wù)端連接。然后從服務(wù)端獲得 calculator 這個類,實(shí)際這個類現(xiàn)在是沒有實(shí)現(xiàn),調(diào)用函數(shù)需要發(fā)送到服務(wù)端。

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Unity實(shí)現(xiàn)滑動更換界面效果

    Unity實(shí)現(xiàn)滑動更換界面效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)滑動更換界面效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#/VB.NET讀取條碼類型及條碼在圖片中的坐標(biāo)位置實(shí)例

    C#/VB.NET讀取條碼類型及條碼在圖片中的坐標(biāo)位置實(shí)例

    我們在創(chuàng)建條形碼時(shí),如果以圖片的方式將創(chuàng)建好的條碼保存到指定文件夾路徑,可以在程序中直接加載圖片使用;已生成的條碼圖片,需要通過讀取圖片中的條碼信息,如條碼類型、條碼繪制區(qū)域在圖片中的四個頂點(diǎn)坐標(biāo)位置等,可參考本文中的方法
    2023-10-10
  • C#實(shí)現(xiàn)獲得某個枚舉的所有名稱

    C#實(shí)現(xiàn)獲得某個枚舉的所有名稱

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)獲得某個枚舉的所有名稱,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2025-01-01
  • C# Winform 實(shí)現(xiàn)屏蔽鍵盤的win和alt+F4的實(shí)現(xiàn)代碼

    C# Winform 實(shí)現(xiàn)屏蔽鍵盤的win和alt+F4的實(shí)現(xiàn)代碼

    最近在做一個惡搞程序,就是打開后,程序獲得桌面的截圖然后,然后全屏顯示在屏幕上,用戶此時(shí)則不能進(jìn)行任何操作。
    2009-02-02
  • C#簡單嵌套flash讀取數(shù)據(jù)的實(shí)現(xiàn)代碼

    C#簡單嵌套flash讀取數(shù)據(jù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#簡單嵌套flash讀取數(shù)據(jù)的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-11-11
  • C#實(shí)現(xiàn)簡單成績管理系統(tǒng)的完整步驟

    C#實(shí)現(xiàn)簡單成績管理系統(tǒng)的完整步驟

    這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)簡單成績管理系統(tǒng)的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • unity使用鏈表實(shí)現(xiàn)貪吃蛇游戲

    unity使用鏈表實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了unity使用鏈表實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Unity圖形學(xué)之ShaderLab入門基礎(chǔ)

    Unity圖形學(xué)之ShaderLab入門基礎(chǔ)

    Unity中所有Shader文件都通過一種陳述性語言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下
    2022-01-01
  • 5分鐘用C#實(shí)現(xiàn)串口助手

    5分鐘用C#實(shí)現(xiàn)串口助手

    本文主要介紹了C#實(shí)現(xiàn)串口助手,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#?將數(shù)據(jù)庫SqlServer數(shù)據(jù)綁定到類中的過程詳解

    C#?將數(shù)據(jù)庫SqlServer數(shù)據(jù)綁定到類中的過程詳解

    本文講述的是讀取數(shù)據(jù)庫中數(shù)據(jù)的常用做法,即將數(shù)據(jù)庫中的數(shù)據(jù)綁定到創(chuàng)建的類中,再將類綁定到DataGridView的數(shù)據(jù)源中的做法,對C#將SqlServer數(shù)據(jù)綁定到類中感興趣的朋友一起看看吧
    2022-06-06

最新評論

乾安县| 荥阳市| 盐边县| 柯坪县| 大荔县| 当阳市| 专栏| 钟祥市| 洮南市| 平远县| 建始县| 时尚| 漳浦县| 延安市| 玉林市| 西乡县| 唐山市| 抚顺市| 东明县| 平潭县| 万年县| 商丘市| 台南市| 榕江县| 富顺县| 彩票| 新民市| 乾安县| 鄂托克旗| 晋江市| 且末县| 阳朔县| 上饶市| 成安县| 内黄县| 内乡县| 山东| 浦县| 红桥区| 信宜市| 枣强县|