Net Remoting基础篇5

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

  第二电脑网导读:对象的副本,不过是因为客户端必须调用构造函数,而采取的无奈之举。既然具体的实现是在服务器端,又为了能在客户端实例化,那么在客户端就实现这些好了。至于实现的细节,就不用管了。      如果远程对象有方法,服务器端则提供方法实现,而客户端就提供这个方法就OK了,至于里面的实现,你可以是抛出一个异常,或者return 一个null值;如果方法返回vo...
  正文: b、利用替代类来取代远程对象的元数据
  
  实际上,我们可以用一个trick,来欺骗Remoting。这里所说的替代类就是这个trick了。既然是提供服务,Remoting传递的远程对象其实现的细节当然是放在服务器端。而要在客户端放对象的副本,不过是因为客户端必须调用构造函数,而采取的无奈之举。既然具体的实现是在服务器端,又为了能在客户端实例化,那么在客户端就实现这些好了。至于实现的细节,就不用管了。
  
  如果远程对象有方法,服务器端则提供方法实现,而客户端就提供这个方法就OK了,至于里面的实现,你可以是抛出一个异常,或者return 一个null值;如果方法返回void,那么里面可以是空。关键是这个客户端类对象要有这个方法。这个方法的实现,其实和方法的声明差不多,所以我说是一个trick。方法如是,构造函数也如此。
  
  还是用代码来说明这种“阴谋”,更直观:
  
  服务器端:
   public class ServerObject:MarshalByRefObject
   {
   public ServerObject()
   {
  
   }
  
   public Person GetPersonInfo(string name,string sex,int age)
   {
   Person person = new Person();
   person.Name = name;
   person.Sex = sex;
   person.Age = age;
   return person;
   }
   }
  
  客户端:
   public class ServerObject:MarshalByRefObject
   {
   public ServerObj()
   {
   throw new System.NotImplementedException();
   }
  
   public Person GetPersonInfo(string name,string sex,int age)
   {
   throw new System.NotImplementedException();
   }
   }
  
  比较客户端和服务器端,客户端的方法GetPersonInfo(),没有具体的实现细节,只是抛出了一个异常。或者直接写上语句return null,照样OK。我们称客户端的这个类为远程对象的替代类。
  
  3、利用配置文件实现
  
  前面所述的方法,于服务器uri、端口、以及激活模式的设置是用代码来完成的。其实我们也可以用配置文件来设置。这样做有个好处,因为这个配置文件是XML文档。如果需要改变端口或其他,我们就不需要修改程序,并重新编译,而是只需要改变这个配置文件即可。
  
  (1) 服务器端的配置文件:
  <configuration>
   <system.runtime.remoting>
   <application name="ServerRemoting">
   <service>
   <wellknown mode="Singleton" type="ServerRemoteObject.ServerObject" objectUri="ServiceMessage"/>
   </service>
   <channels>
   <channel ref="tcp" port="8080"/>
   </channels>
   </application>
   </system.runtime.remoting>
  </configuration>
  
  如果是客户端激活模式,则把wellknown改为activated,同时删除mode属性。
  
  把该配置文件放到服务器程序的应用程序文件夹中,命名为ServerRemoting.config。那么前面的服务器端程序直接用这条语句即可:
  RemotingConfiguration.Configure("ServerRemoting.config");
  
  (2) 客户端配置文件
  
  如果是客户端激活模式,修改和上面一样。调用也是使用RemotingConfiguration.Configure()方法来调用存储在客户端的配置文件。
  
  配置文件还可以放在machine.config中。如果客户端程序是web应用程序,则可以放在web.config中。
  
  4、启动/关闭指定远程对象
  
  Remoting中没有提供类似UnregisterWellKnownServiceType()的方法,也即是说,一旦通过注册了远程对象,如果没有关闭通道的话,该对象就一直存在于通道中。只要客户端激活该对象,就会创建对象实例。如果Remoting传送的只有一个远程对象,这不存在问题,关闭通道就可以了。如果传送多个远程对象呢?要关闭指定的远程对象应该怎么做?关闭之后又需要启动又该如何?

"Net Remoting基础篇5"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12767.html


关键字:

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

站内搜索: 高级搜索

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