最近在了解remoting方面的一些内容
不知道个位大侠在做3层结构的系统的时候具体怎么应用remoting问题1:什么情况下用服务器端激活,什么情况下用客户端激活
看了LoveCherry的专栏,我还是不清楚,谁能根据自己的实际项目应用情况给我简单说一下
-----msdn--------------------------------
客户端请求服务器激活的类型实例时,只在客户端应用程序域中创建一个代理。然而,这也意味着当您使用默认实现时,只允许对服务器激活的类型使用默认构造函数。若要发布其实例将使用带参数的特定构造函数创建的类型,可以使用客户端激活或者动态地发布您的特定实例。
----LoveCherry的专栏的部分内容-----------
客户端激活和Singleton是有状态的,而客户端激活和Singleton区别在于Singleton是共享对象的。因此我们可以选择符合自己条件的激活方式:
状态 拥有各自实例
Singleton 有 无
SingleCall 无 有
客户端激活 有 有
-----------------------------------------问题2:如果1的问题解决了
是否需要把激活方式不同的类分到不同的项目中问题3:
看到网上的一些例子,一个命名空间中有一个类,还有一个配置文件(里面也有命名空间和类名),难道每个类都要一个配置文件么
不知道个位大侠在做3层结构的系统的时候具体怎么应用remoting问题1:什么情况下用服务器端激活,什么情况下用客户端激活
看了LoveCherry的专栏,我还是不清楚,谁能根据自己的实际项目应用情况给我简单说一下
-----msdn--------------------------------
客户端请求服务器激活的类型实例时,只在客户端应用程序域中创建一个代理。然而,这也意味着当您使用默认实现时,只允许对服务器激活的类型使用默认构造函数。若要发布其实例将使用带参数的特定构造函数创建的类型,可以使用客户端激活或者动态地发布您的特定实例。
----LoveCherry的专栏的部分内容-----------
客户端激活和Singleton是有状态的,而客户端激活和Singleton区别在于Singleton是共享对象的。因此我们可以选择符合自己条件的激活方式:
状态 拥有各自实例
Singleton 有 无
SingleCall 无 有
客户端激活 有 有
-----------------------------------------问题2:如果1的问题解决了
是否需要把激活方式不同的类分到不同的项目中问题3:
看到网上的一些例子,一个命名空间中有一个类,还有一个配置文件(里面也有命名空间和类名),难道每个类都要一个配置文件么
问题三:一个通道可以注册多个类:
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.Class),"RemoteObject.Class",WellKnownObjectMode.Singleton);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.Product),"RemoteObject.Product",WellKnownObjectMode.Singleton);
2、SingleCall和Singleton,对于前者每次调用都会新建对象,因此对象是无状态的。对于后者,对象只被创建一次,所有客户共享对象状态,因此对象是有状态的。另外一种客户端激活对象使用类的类型来激活,uri再后台被动态创建,并且返回给客户程序,客户激活对象是有状态的
3、对于Singleton对象来说需要考虑伸缩性,Singleton对象不能在多个服务器上被部署,如果要跨服务器就不能使用Singleton了
其实就是在服务器端代理一个类,然后客户端声明这个类就可以通过类里面的成员实现与服务器通话。客户端激活,这个不清楚可以需要配置文件,也可以不需要。如果有配置文件当服务器地址(或者其他变量)变更时你就无需重新编译,在配置文件里面更改IP就可以了
类 ClassA,ClassAB,ClassAC,ClassAD,
ClassAB,ClassAC,ClassAD 继承ClassA
ClassA 实现 InterfaceAClassAB,ClassAC,ClassAD都有带参数的构造函数,可以考虑用CAO
那ClassA,InterfaceA也要CAO么
{
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后在其周围画一个有颜色的框,表示选中,单击下一个时,去掉上一个周围的框......
如果不这样搞,有没有其他办法,谢谢!
new 的方式,关键在于对象生存期的管理不同.在服务器上保存状态就只有客户端激活了.
每个类都应该可以定义相关的激活方式(没试过),只在配置文件中写清楚就可以了,而客户端配置文件也相对应进行设置,跟项目应该没什么关系!
有点过分吧
跑我这里来拉人啊
和我的题意差不多就算了
竟然相差这么远:)
还有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...这些类要怎么处理呢,只要序列化就行了么