1.至于两者差异,非分布式程序部署我就不说了。对于分布式,我觉得你最好了解一下需要用到非分布式部署的程序,比如asp.net web service,.net remoting的架构。然后你就会自然而然知道两者部署的不同点了。当然你也可以在msdn中查,不过我觉得自己了解架构,理解得可能会更深一些。2.非分布式一般情况下无需用到MarshalByRefObject(并且也不建议用),这个和DCOM不同。DCOM中如果服务器端和客户端同时装在一台机器上时,系统会自然把其当成本地类库调用,减少性能损失。当remoting不会!

解决方案 »

  1.   

    多谢。
    关于第二点:非分布式如果用到MarshalByRefObject,是不是会带来累赘?具体描述一下?
    感觉中间层部署到同一台机器上,和部署到不同的机器上的数据传输应该会不一样。虽然Facade都是继承自MarshalByRefObject,不知道内部是怎么处理的。
      

  2.   

    我曾看到过一篇文档,老外写的,大概是这么说的,MarshalByRefObject是一个远程对象继承类,主要用作分布式开发中远程对象的父类,分布式应用程序主要获得远程对象的引用,而远程对象需要给远程客户端引用,所以需要继承自MarshalByRefObject,而非分布式应用程序所有的调用都在本地类库中,不需要引用远程对象,所以不需要继承自MarshalByRefObject,也不建议。至于内部处理:
    如果使用了MarshalByRefObject,那么其实这个程序应该是分布式应用程序。
    简单的说:
    客户端->代理->远程对象
    如果要完全了解:
    得通道、消息、等相关内容。你想想,直接调用本地类库是不是应该比通过这些处理后调用远程对象更有效果。
      

  3.   

    我知道MarshalByRefObject作为远程调用的方法:客户端->代理->远程对象。
    问题是当我部署成非分布式时,MarshalByRefObject下的对象是不是可以向本地对象一样,这是我最关心的。
    因为现在为了程序的弹性,支持分布式部署和非分布式部署,facade我从MarshalByRefObject继承下来的。
    看您的回复,我基本了解,是不是如果facade从MarshalByRefObject继承下来,即使我部署成非分布式,模块调用也是走的"客户端->代理->远程对象"?