.net框架下MashalByRefObject类的简单使用

来源:互联网 发布:淘宝怎么查总消费 编辑:程序博客网 时间:2024/05/18 00:47

“.net framework下的marshalByRefObject类允许在支持远程处理的应用程序中跨应用程序域边界访问对象”——MSDN。说简单点,通过继承marshalByRefObject类能够实现远程调用。

 

  继承MarshalByRefObject的类能够被远程调用。例如定义了如下的类:

 

public class AgentObj : MarshalByRefObject

    ...

    public static event RunEventHandler RunEvent;

    public static event StopEventHandler StopEvent;

    public void run()

    {

        ...

        RunEvent();

    }

    public void stop()

    {

        ...  

        StopEvent();

    }

 }

 

 注册通道和注册远程对象都通过配置文件完成。在服务器端需要设置事件句柄的值。

 

AgentObj.RunEvent += new AgentObj.RunEventHandler (OnRun) ;

AgentObj.StopEvent += new AgentObj.StopEventHandler (OnStop) ;

 

onRun 和 OnStop是两个服务器端的私有方法。此方法将会被客户端调用。注意:remoting调用的不是方法而是对方法的引用。

 

  在客户端通过ConfigurationManager.AppSettings["ServiceURL"] 获得key为ServiceURL的value。ServiceURL保存的是远程URL。

AgentObj app = (AgentObj)Activator.GetObject(typeof(AgentObj), uri.Replace("@machine",ip)) 激活在服务器端的对象。此时在客户端就可以调用AgentObj对象的方法来开始远程调用了。

 

app.run();

 

小结:.net 框架提供的MashalByRefObject类实现远程调用非常方便,在使用过程中还需考虑通道的注册方法:分为tcpChannel和httpChannel两种,对象注册方法,激活模式等。