远程代理Remoting/RealProxy

Posted chenh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程代理Remoting/RealProxy相关的知识,希望对你有一定的参考价值。

使用.Net Remoting/RealProxy

采用TransparentProxy和RealProxy实现对象的代理,实现思路如下:Client -TransparentProxy - RealProxy - Target Object

下面实现自定义的TransparentProxy和RealProxy

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Proxies;
using System.Text;
using System.Threading.Tasks;

namespace MyRealProxyApplication
{
    public class MyRealProxy<T> : RealProxy
    {
        private T _target;
        public MyRealProxy(T target)
            : base(typeof(T))
        {
            this._target = target;
        }
        public override IMessage Invoke(IMessage msg)
        {
            PreProceede(msg);
            IMethodCallMessage callMessage = (IMethodCallMessage)msg;
            object returnValue = callMessage.MethodBase.Invoke(this._target, callMessage.Args);
            PostProceede(msg);
            return new ReturnMessage(returnValue, new object[0], 0, null, callMessage);
        }
        public void PreProceede(IMessage msg)
        {
            Console.WriteLine("方法执行前");
        }
        public void PostProceede(IMessage msg)
        {
            Console.WriteLine("方法执行后");
        }
    }
    
}
using System;

namespace MyRealProxyApplication
{
    public static class TransparentProxy
    {
        public static T Create<T>()
        {
            T instance = Activator.CreateInstance<T>();
            MyRealProxy<T> realProxy = new MyRealProxy<T>(instance);
            T transparentProxy = (T)realProxy.GetTransparentProxy();
            return transparentProxy;
        }
    }
}

用户注册接口和实现

 public interface IUserProcessor
    {
        void RegUser(User user);
    }

 public void RegUser(User user)
        {
            Console.WriteLine("用户已注册。");
        }

public class User
    {
        public string Name{get;set;}
        public string PassWord{get;set;}
 
    }

客户端调用

public class Transfer
    {
        public static void Run()
        {
            try
            {
                User user = new User() { Name = "lee", PassWord = "123123123123" };
                UserProcessor userprocessor = TransparentProxy.Create<UserProcessor>();
                userprocessor.RegUser(user);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

 

以上是关于远程代理Remoting/RealProxy的主要内容,如果未能解决你的问题,请参考以下文章

IOC 控制反转Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )(代码片

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )(代码片

vnc 远程桌面连上去,一片空白啥都没有的解决办法

远程服务器返回错误:(407) 需要代理身份验证

用代码写代理给代码找代练!

Unix 邮件传输代理软件 “Exim” 存在两处关键漏洞,可执行远程代码开展 DDoS 攻击