开发者社区> 杰克.陈> 正文

WPF 使用RPC调用其他进程

简介: 原文:WPF 使用RPC调用其他进程 如果在 WPF 需要用多进程通信,一个推荐的方法是 WCF ,因为 WCF 是 RPC 计算。先来讲下 RPC (Remote Procedure Call) 远程过程调用,他是通过特定协议,包括 tcp 、http 等对其他进程进行调用的技术。
+关注继续查看
原文:WPF 使用RPC调用其他进程

如果在 WPF 需要用多进程通信,一个推荐的方法是 WCF ,因为 WCF 是 RPC 计算。先来讲下 RPC (Remote Procedure Call) 远程过程调用,他是通过特定协议,包括 tcp 、http 等对其他进程进行调用的技术。详细请看百度

现在不会告诉大家如何使用 WCF ,下面讲的是使用 remoting 这个方法。需要知道 dotnet remoting 是已经过时的技术,建议使用 wcf 但是 wcf 部署难度比较高,对于性能要求比较高或想快速使用,建议使用 remoting 。使用方法很简单

如果不想知道具体是怎么做,只想使用,那么请看WPF 封装 dotnet remoting 调用其他进程,欢迎加入dotnet 职业学院任何问题都可以在群里交流

首先创建三个工程,一个工程放其他两个需要使用的库,一个是服务端,一个是客户端。其中客户端就可以调用服务端,客户端和服务端是两个不同的进程,所以可以跨进程调用。

先创建一个简单的工程,库的工程 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 的程序调用其他平台的库,因为进程运行的平台不一样,但是通信是相同。

其他的功能我没有使用,我就使用打开服务,调用他的函数,所以如果大家遇到问题,不要来问我。如果按照我的代码无法运行,可以发邮件给我,我发源代码给你

代码下载:网盘

更多关于 WPF dotnet remoting RPC 的博客请看

.net remoting 使用事件

.net remoting 抛出异常

如果不想知道那么多,想要快速开始,请看

WPF 封装 dotnet remoting 调用其他进程

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

img_dd4611aadb36aaea70312f3b5f723ac6.jpe

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Netty实现简单RPC调用
我们知道Dubbo是一个RPC框架,那RPC框架需要实现什么?需要实现的是调用远程服务和本地服务一样方便,同时提高调用远程服务的性能。而服务端和客户端之间的关系,其实就是一个生产和消费的关系。
35 0
Rpc 调用监控 | 学习笔记
快速学习 Rpc 调用监控
112 0
rabbitmq高并发RPC调用,你Get到了吗?
rabbitmq高并发RPC调用,你Get到了吗?
297 0
IOS 某电商App签名算法解析(二) Frida RPC调用
IOS 某电商App签名算法解析(二) Frida RPC调用
238 0
Netty框架入门(二)之基于Netty实现简单的Rpc调用
Netty框架入门(二)之基于Netty实现简单的Rpc调用
98 0
直观讲解一下 RPC 调用和 HTTP 调用的区别!
第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; 第二层:表示层。定义不同的系统中数
141 0
直观讲解一下RPC调用和HTTP调用的区别!
直观讲解一下RPC调用和HTTP调用的区别!
96 0
SpringCloud Alibaba实战(12:引入Dubbo实现RPC调用)
SpringCloud Alibaba实战(12:引入Dubbo实现RPC调用)
456 0
+关注
杰克.陈
一个安静的程序猿~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载