Remoting:如何判断对象是远程的还是本地的

    Remoting 使得跨应用程序域的对象访问变得非常简单,我们可以像操纵本地对象那样“透明”的访问远程对象,而不管这个远程对象是在网络的另一台计算机上,在本机的另一个进程空间中,或者在别的应用程序域中。对于远程对象在本地的调用方来说,他可以不管这个对象是本地的还是远程的,都用相同的方法访问其数据或调用其功能。但在有些情况下,比如枚举远程对象中一个较大的值类型集合时,这个对象是“远程”还是“本地”的,在处理方法上就应该有所不同了。如果直接在远程对象上枚举,每次调用都会涉及网络信道的访问,以及序列化、反序列化的开销,时间都花费在了网络传输上。一个好的解决办法是在保证同步的前提下,把远程对象的集合数据一次性复制到本地,然后在本地枚举。
    但另一个问题随之而来:调用方处理的“远程对象”也可能不是远程的,而是本地创建的,此时断无把集合数据再复制一份的必要。所以我们还必须分清这个对象是“远程”还是“本地”的,用什么办法呢?
    一个并不很好的办法是调用对象的 CreateObjRef( Type ) 方法,若是远程对象则会返回其通信代理的相关信息;若是本地对象,将会引发 RemotingException 异常。

判断指定对象是否远程对象。


    因为是通过引发异常来进行区分,所以觉得这个方法并不好,不知还有没有其它的方法。

posted on 2006-08-03 11:34  阳春三月  阅读(770)  评论(2编辑  收藏  举报

导航