Net Remoting基础篇3

时间:2010-02-04 13:03:41  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:远程对象。      客户端激活模式有两种方法:   1) 调用RemotingConfiguration的静态方法RegisterActivatedClientType()。这个方法返回值为Void,它只是将远程对象注册在客户端而已。具体的实例化还需要调用对象类的构造函数。    RemotingConfiguration.RegisterActivatedClientType(    typeof(Serve...
  正文:(2) 客户端激活模式
  
  如前所述,WellKnown模式在客户端创建对象时,只能调用默认的构造函数,上面的代码就说明了这一点,因为GetObject()方法不能传递构造函数的参数。而客户端激活模式则可以通过自定义的构造函数来创建远程对象。
  
  客户端激活模式有两种方法:
  1) 调用RemotingConfiguration的静态方法RegisterActivatedClientType()。这个方法返回值为Void,它只是将远程对象注册在客户端而已。具体的实例化还需要调用对象类的构造函数。
   RemotingConfiguration.RegisterActivatedClientType(
   typeof(ServerRemoteObject.ServerObject),
   "tcp://localhost:8080/ServiceMessage");
   ServerRemoteObject.ServerObject serverObj = new ServerRemoteObject.ServerObject();
  
  2) 调用进程Activator的CreateInstance()方法。这个方法将创建方法参数指定类型的类对象。它与前面的GetObject()不同的是,它要在客户端调用构造函数,而GetObject()只是获得对象,而创建实例是在服务器端完成的。CreateInstance()方法有很多个重载,我着重说一下其中常用的两个。
  a、 public static object CreateInstance(Type type, object[] args, object[] activationAttributes);
  
  参数说明:
  type:要创建的对象的类型。
  args :与要调用构造函数的参数数量、顺序和类型匹配的参数数组。如果 args 为空数组或空引用(Visual Basic 中为 Nothing),则调用不带任何参数的构造函数(默认构造函数)。
  activationAttributes :包含一个或多个可以参与激活的属性的数组。
  
  这里的参数args是一个object[]数组类型。它可以传递要创建对象的构造函数中的参数。从这里其实可以得到一个结论:WellKnown激活模式所传递的远程对象类,只能使用默认的构造函数;而Activated模式则可以用户自定义构造函数。activationAttributes参数在这个方法中通常用来传递服务器的url。
  假设我们的远程对象类ServerObject有个构造函数:
   ServerObject(string pName,string photoshop/ target=_blank class=infotextkey>psex,int pAge)
   {
   name = pName;
   sex = pSex;
   age = pAge;
   }
  
  那么实现的代码是:
   object[] attrs = {new UrlAttribute("tcp://localhost:8080/ServiceMessage")};
   object[] objs = new object[3];
   objs[0] = "wayfarer";
   objs[1] = "male";
   objs[2] = 28;
   ServerRemoteObject.ServerObject = Activator.CreateInstance(
   typeof(ServerRemoteObject.ServerObject),objs,attrs);
  可以看到,objs[]数组传递的就是构造函数的参数。
  
  b、public static ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttribute);
  
  参数说明:
  assemblyName :将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为空引用(Visual Basic 中为 Nothing),则搜索正在执行的程序集。
  typeName:首选类型的名称。
  activationAttributes :包含一个或多个可以参与激活的属性的数组。
  
  参数说明一目了然。注意这个方法返回值为ObjectHandle类型,因此代码与前不同:
   object[] attrs = {new UrlAttribute("tcp://localhost:8080/EchoMessage")};
   ObjectHandle handle = Activator.CreateInstance("ServerRemoteObject",
   "ServerRemoteObject.ServerObject",attrs);
   ServerRemoteObject.ServerObject obj = (ServerRemoteObject.ServerObject)handle.Unwrap();
  
  这个方法实际上是调用的默认构造函数。ObjectHandle.Unwrap()方法是返回被包装的对象。
  
  说明:要使用UrlAttribute,还需要在命名空间中添加:using System.Runtime.Remoting.Activation;
  
  五、Remoting基础的补充
   《Net Remoting基础篇3》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12769.html


关键字:

关于《Net Remoting基础篇3》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td