一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - WPF利用RPC調用其他進程的方法詳解

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

2022-02-24 13:55lindexi C#

這篇文章主要給大家介紹了關于WPF利用RPC調用其他進程的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

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

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

方法如下:

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

?
1
2
3
4
5
6
7
8
9
public class RemoteCalculator : MarshalByRefObject
{
 public const int Port = 13570;
 
 public int Add(int a, int b)
 {
  return a + b;
 }
}

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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 ,主要是打開連接,執行客戶端發過來的函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 的程序調用其他平臺的庫,因為進程運行的平臺不一樣,但是通信是相同。

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

代碼下載:點擊這里

總結

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

原文鏈接:https://lindexi.gitee.io/post/WPF-使用RPC調用其他進程.html

延伸 · 閱讀

精彩推薦
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
主站蜘蛛池模板: 欧美帅老头oldmangay | gayrb免费漫画入口 | 青草午夜精品视频在线观看 | 偷拍自拍校园春色 | 日本精品一卡二卡≡卡四卡 | 精品视频一区在线观看 | sao虎影院桃红视频在线观看 | 娇小异类videos | 精品久久免费观看 | 楚乔传第二部全60集免费观看 | 色天天综合色天天看 | 欧美a级v片在线观看一区 | 四虎最新免费观看网址 | 国产欧美一区二区精品久久久 | 日韩精品成人a在线观看 | 特黄级 | 91国内精品 | 性美国人xxxxx18| 欧美精品v欧洲高清 | 国产资源免费观看 | 国产精品久久一区 | 精彩国产萝视频在线 | 久久水蜜桃亚洲AV无码精品偷窥 | 91香蕉视频在线播放 | a性片 | 亚洲欧美日韩国产一区二区精品 | 亚洲第一免费播放区 | 9丨精品国产高清自在线看 9久热这里只有精品免费 | 国产在线视频欧美亚综合 | 国产日产国无高清码2020 | 免费视频左左视频 | 亚洲激情在线 | 男同gay作爰视频网站 | 国产高清视频在线 | 久久99视热频国只有精品 | 91视频一区 | 国产精品资源在线观看 | 日韩一品在线播放视频一品免费 | 97久久久亚洲综合久久88 | 日本高清在线播放一区二区三区 | 国产日韩精品一区二区 |