当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  Net Remoting基础篇4

 Net Remoting基础篇4

点击次数:16 次 发布日期:2008-11-26 10:43:53 作者:源代码网
源代码网推荐      (1) WellKnown激活模式:
源代码网推荐  
源代码网推荐  通过接口来实现。在服务器端,提供接口和具体类的实现,而在客户端仅提供接口:
源代码网推荐   public interface IServerObject
源代码网推荐   {
源代码网推荐   Person GetPersonInfo(string name,string sex,int age);
源代码网推荐   }
源代码网推荐  
源代码网推荐  public class ServerObject:MarshalByRefObject,IServerObject
源代码网推荐  { ......}
源代码网推荐  注意:两边生成该对象程序集的名字必须相同,严格地说,是命名空间的名字必须相同。
源代码网推荐  
源代码网推荐  (2) 客户端激活模式:
源代码网推荐  
源代码网推荐  如前所述,对于客户端激活模式,不管是使用静态方法,还是使用CreateInstance()方法,都必须在客户端调用构造函数实例化对象。所以,在客户端我们提供的远程对象,就不能只提供接口,而没有类的实现。实际上,要做到与远程对象元数据的分离,可以由两种方法供选择:
源代码网推荐  
源代码网推荐  a、利用WellKnown激活模式模拟客户端激活模式:
源代码网推荐  
源代码网推荐  方法是利用设计模式中的“抽象工厂”,下面的类图表描述了总体解决方案:
源代码网推荐  
源代码网推荐  
源代码网推荐  我们在服务器端的远程对象中加上抽象工厂的接口和实现类:
源代码网推荐   public interface IServerObject
源代码网推荐   {
源代码网推荐   Person GetPersonInfo(string name,string sex,int age);
源代码网推荐   }
源代码网推荐  
源代码网推荐   public interface IServerObjFactory
源代码网推荐   {
源代码网推荐   IServerObject CreateInstance();
源代码网推荐   }
源代码网推荐  
源代码网推荐   public class ServerObject:MarshalByRefObject,IServerObject
源代码网推荐   {
源代码网推荐   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 ServerObjFactory:MarshalByRefObject,IServerObjFactory
源代码网推荐   {
源代码网推荐   public IServerObject CreateInstance()
源代码网推荐   {
源代码网推荐   return new ServerObject();
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐  然后再客户端的远程对象中只提供工厂接口和原来的对象接口:
源代码网推荐   public interface IServerObject
源代码网推荐   {
源代码网推荐   Person GetPersonInfo(string name,string sex,int age);
源代码网推荐   }
源代码网推荐  
源代码网推荐   public interface IServerObjFactory
源代码网推荐   {
源代码网推荐   IServerObject CreateInstance();
源代码网推荐   }
源代码网推荐  我们用WellKnown激活模式注册远程对象,在服务器端:
源代码网推荐   //传递对象;
源代码网推荐   RemotingConfiguration.RegisterWellKnownServiceType(
源代码网推荐   typeof(ServerRemoteObject.ServerObjFactory),
源代码网推荐   "ServiceMessage",WellKnownObjectMode.SingleCall);
源代码网推荐  
源代码网推荐  注意这里注册的不是ServerObject类对象,而是ServerObjFactory类对象。
源代码网推荐  
源代码网推荐  客户端:
源代码网推荐  ServerRemoteObject.IServerObjFactory serverFactory =
源代码网推荐   (ServerRemoteObject.IServerObjFactory) Activator.GetObject(
源代码网推荐   typeof(ServerRemoteObject.IServerObjFactory),
源代码网推荐   "tcp://localhost:8080/ServiceMessage");
源代码网推荐  
源代码网推荐  ServerRemoteObject.IServerObject serverObj = serverFactory.CreateInstance();
源代码网推荐  
源代码网推荐  为什么说这是一种客户端激活模式的模拟呢?从激活的方法来看,我们是使用了SingleCall模式来激活对象,但此时激活的并非我们要传递的远程对象,而是工厂对象。如果客户端要创建远程对象,还应该通过工厂对象的CreateInstance()方法来获得。而这个方法正是在客户端调用的。因此它的实现方式就等同于客户端激活模式。
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华