91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WPF利用RPC調用其他進程的方法詳解

發布時間:2020-09-18 17:46:10 來源:腳本之家 閱讀:188 作者:lindexi 欄目:編程語言

前言

如果在 WPF 需要用多進程通信,一個推薦的方法是 WCF ,因為 WCF 是 RPC 計算。先來講下 RPC (Remote Procedure Call) 遠程過程調用,他是通過特定協議,包括 tcp 、http 等對其他進程進行調用的技術。詳細請看百度

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

首先創建三個工程,一個工程放其他兩個需要使用的庫,一個是服務端,一個是客戶端。其中客戶端就可以調用服務端,客戶端和服務端是兩個不同的進程,所以可以跨進程調用。

方法如下:

先創建一個簡單的工程,庫的工程 RemoteObject ,里面只有一個類

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

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

注意這個類需要繼承 MarshalByRefObject ,這個類是在兩個進程引用,客戶端不實現這個類,所以客戶端使用這個類接口同樣可以。具體調用這個類的方法在服務端運行,結果通過 tcp 或 http 返回。

客戶端的主要代碼是連接服務端,然后訪問庫的 add 函數,但是這個函數不在客戶端運行,通過 tcp 調用服務端,讓他運行。

  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));
  }

服務端的名稱是 CalcnsMnlhzydYeuiitcCddhxvlhm ,主要是打開連接,執行客戶端發過來的函數

  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;

需要注意,客戶端點擊按鈕需要先打開服務端,使用這個代碼Process.Start("CalcnsMnlhzydYeuiitcCddhxvlhm.exe");然后創建 tcp 告訴通過tcp和服務端連接。然后從服務端獲得 calculator 這個類,實際這個類現在是沒有實現,調用函數需要發送到服務端。

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

客戶端調用的"tcp://" + "127.0.0.1" + ":" + RemoteCalculator.Port + "/RemoteCalculator"最后一個RemoteCalculator就是服務端注冊的第二個函數。

那么這個功能的作用是什么?因為 x64 程序不能調用 x86 的庫,所以可以用這個方法在 x64 的程序調用其他平臺的庫,因為進程運行的平臺不一樣,但是通信是相同。

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

代碼下載:點擊這里

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连江县| 周至县| 武汉市| 乐业县| 吴桥县| 九龙城区| 大埔区| 周至县| 深圳市| 潜江市| 山东省| 铁岭市| 敦煌市| 宜丰县| 田东县| 江川县| 松原市| 华池县| 青铜峡市| 湖口县| 沿河| 临城县| 乾安县| 龙口市| 临清市| 凤凰县| 海口市| 温州市| 岢岚县| 阿图什市| 南投县| 满城县| 金平| 潮州市| 汕头市| 宁都县| 旬邑县| 益阳市| 嘉荫县| 五家渠市| 滁州市|