最近在了解remoting方面的一些内容
不知道个位大侠在做3层结构的系统的时候具体怎么应用remoting问题1:什么情况下用服务器端激活,什么情况下用客户端激活
看了LoveCherry的专栏,我还是不清楚,谁能根据自己的实际项目应用情况给我简单说一下
-----msdn--------------------------------
客户端请求服务器激活的类型实例时,只在客户端应用程序域中创建一个代理。然而,这也意味着当您使用默认实现时,只允许对服务器激活的类型使用默认构造函数。若要发布其实例将使用带参数的特定构造函数创建的类型,可以使用客户端激活或者动态地发布您的特定实例。
----LoveCherry的专栏的部分内容-----------
客户端激活和Singleton是有状态的,而客户端激活和Singleton区别在于Singleton是共享对象的。因此我们可以选择符合自己条件的激活方式:
                        状态      拥有各自实例
Singleton              有            无
SingleCall              无            有
客户端激活              有            有
-----------------------------------------问题2:如果1的问题解决了
是否需要把激活方式不同的类分到不同的项目中问题3:
看到网上的一些例子,一个命名空间中有一个类,还有一个配置文件(里面也有命名空间和类名),难道每个类都要一个配置文件么

解决方案 »

  1.   

    问题二:需要
    问题三:一个通道可以注册多个类:
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.Class),"RemoteObject.Class",WellKnownObjectMode.Singleton);
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.Product),"RemoteObject.Product",WellKnownObjectMode.Singleton);
      

  2.   

    1、客户端激活可以调用自定义的构造方法,而不像服务端激活只能使用默认的构造方法
    2、SingleCall和Singleton,对于前者每次调用都会新建对象,因此对象是无状态的。对于后者,对象只被创建一次,所有客户共享对象状态,因此对象是有状态的。另外一种客户端激活对象使用类的类型来激活,uri再后台被动态创建,并且返回给客户程序,客户激活对象是有状态的
    3、对于Singleton对象来说需要考虑伸缩性,Singleton对象不能在多个服务器上被部署,如果要跨服务器就不能使用Singleton了
      

  3.   

    我使用过TcpChannel,应该是属于服务器端激活。
    其实就是在服务器端代理一个类,然后客户端声明这个类就可以通过类里面的成员实现与服务器通话。客户端激活,这个不清楚可以需要配置文件,也可以不需要。如果有配置文件当服务器地址(或者其他变量)变更时你就无需重新编译,在配置文件里面更改IP就可以了
      

  4.   

    举个例子 接口InterfaceA
    类 ClassA,ClassAB,ClassAC,ClassAD,
    ClassAB,ClassAC,ClassAD 继承ClassA
    ClassA 实现 InterfaceAClassAB,ClassAC,ClassAD都有带参数的构造函数,可以考虑用CAO
    那ClassA,InterfaceA也要CAO么
      

  5.   

    http://www.daima.com.cn/Info/80/Info28275/
      

  6.   

    http://www.cnblogs.com/rickie/category/5082.html
      

  7.   

    public Form1()
    {
    InitializeComponent();
    BorderPanel eee = new BorderPanel();
    eee.Height =200;
    eee.Width = 200;
    eee.BorderStyle =BorderStyle.Fixed3D ;
    eee.Parent = this;
    eee.Left =200;InitializeComponent();
    BorderPanel eee2 = new BorderPanel();
    eee2.Height =200;
    eee2.Width = 200;
    eee2.BorderStyle =BorderStyle.Fixed3D ;
    eee2.Parent = this;BorderPanel sss = new BorderPanel();
    sss.Parent = this;
    sss.Height =200;
    sss.Width = 200;
    sss.BorderStyle =BorderStyle.Fixed3D ;
    sss.Top = 220;
    sss.Left  = 400;
    }
    单击Panel后在其周围画一个有颜色的框,表示选中,单击下一个时,去掉上一个周围的框......
    如果不这样搞,有没有其他办法,谢谢!
      

  8.   

    如果使用配置文件的话,这些激活设置可以随时改,而不管是服务端激活还是客户端激活,都可以使用
    new 的方式,关键在于对象生存期的管理不同.在服务器上保存状态就只有客户端激活了.
    每个类都应该可以定义相关的激活方式(没试过),只在配置文件中写清楚就可以了,而客户端配置文件也相对应进行设置,跟项目应该没什么关系!
      

  9.   

    DragonYingzi() 
    有点过分吧
    跑我这里来拉人啊
    和我的题意差不多就算了
    竟然相差这么远:)
      

  10.   

    class:FormInfoCreator(一个方法创建FormInfo实例),FormInfo(只有带参数构造函数),
    还有FormInfo的属性是一些自定义类(ClassA...)(在执行构造函数的时候生成),---客户端
    ESAPForm 构造函数的参数是FormInfo类型客户端需要创建实例FormInfoCreator(默认构造函数),然后调用其方法生成FormInfo(用于客户端类的参数)现在代码如下
    FormInfoCreator _finfocreator =new  FormInfoCreator();         EsapForm f=new EsapForm(_finfocreator.GetFormInfo(mn.Form_Id,FormType.EsapForm,EsapSession.DFactory));----
    1 把FormInfoCreator 做为远程对象正确么
    FormInfoCreator可以用SingleTon2 FormInfo 和FormInfo用到的ClassA...这些类要怎么处理呢,只要序列化就行了么
      

  11.   

    感谢楼上几位的帮助特别感谢 LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) 的耐心讲解