Net Remoting基础篇2

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

  第二电脑网导读:sp; 要跨越应用程序域进行通信,必须实现通道。如前所述,Remoting提供了IChannel接口,分别包含TcpChannel和HttpChannel两种类型的通道。这两种类型除了性能和序列化数据的格式不同外,实现的方式完全一致,因此下面我们就以TcpChannel为例。      注册TcpChannel,首先要在项目中添加引用“System.Runtime.Remoting”,然后using名字空间:System...
  正文:三、服务器
  
  根据第一部分所述,根据激活模式的不同,通道类型的不同服务器端的实现方式也有所不同。大体上说,服务器端应分为三步:
  
  1、注册通道
  
  要跨越应用程序域进行通信,必须实现通道。如前所述,Remoting提供了IChannel接口,分别包含TcpChannel和HttpChannel两种类型的通道。这两种类型除了性能和序列化数据的格式不同外,实现的方式完全一致,因此下面我们就以TcpChannel为例。
  
  注册TcpChannel,首先要在项目中添加引用“System.Runtime.Remoting”,然后using名字空间:System.Runtime.Remoting.Channel.Tcp。代码如下:
   TcpChannel channel = new TcpChannel(8080);
   ChannelServices.ReGISterChannel(channel);
  
  在实例化通道对象时,将端口号作为参数传递。然后再调用静态方法ReGISterChannel()来注册该通道对象即可。
  
  2、注册远程对象
  
  注册了通道后,要能激活远程对象,必须在通道中注册该对象。根据激活模式的不同,注册对象的方法也不同。
  
  (1) SingleTon模式
  
  对于WellKnown对象,可以通过静态方法RemotingConfiguration.RegisterWellKnownServiceType()来实现:RemotingConfiguration.RegisterWellKnownServiceType(
   typeof(ServerRemoteObject.ServerObject),
   "ServiceMessage",WellKnownObjectMode.SingleTon);
  
  (2)SingleCall模式
  
  注册对象的方法基础上和SingleTon模式相同,只需要将枚举参数WellKnownObjectMode改为SingleCall就可以了。RemotingConfiguration.RegisterWellKnownServiceType(
   typeof(ServerRemoteObject.ServerObject),
   "ServiceMessage",WellKnownObjectMode.SingleCall);
  
  (3)客户端激活模式
  
  对于客户端激活模式,使用的方法又有不同,但区别不大,看了代码就一目了然。
  RemotingConfiguration.ApplicationName = "ServiceMessage";
  RemotingConfiguration.RegisterActivatedServiceType(
   typeof(ServerRemoteObject.ServerObject));
  
  为什么要在注册对象方法前设置ApplicationName属性呢?其实这个属性就是该对象的URI。对于WellKnown模式,URI是放在RegisterWellKnownServiceType()方法的参数中,当然也可以拿出来专门对ApplicationName属性赋值。而RegisterActivatedServiceType()方法的重载中,没有ApplicationName的参数,所以必须分开。
  
  3、注销通道
  
  如果要关闭Remoting的服务,则需要注销通道,也可以关闭对通道的监听。在Remoting中当我们注册通道的时候,就自动开启了通道的监听。而如果关闭了对通道的监听,则该通道就无法接受客户端的请求,但通道仍然存在,如果你想再一次注册该通道,会抛出异常。
  
   //获得当前已注册的通道;
   IChannel[] channels = ChannelServices.RegisteredChannels;
  
   //关闭指定名为MyTcp的通道;
   foreach (IChannel eachChannel in channels)
   {
   if (eachChannel.ChannelName == "MyTcp")
   {
   TcpChannel tcpChannel = (TcpChannel)eachChannel;
  
   //关闭监听;
   tcpChannel.StopListening(null);
  
   //注销通道;
   ChannelServices.UnregisterChannel(tcpChannel);
   }
   }
  代码中,RegisterdChannel属性获得的是当前已注册的通道。在Remoting中,是允许同时注册多个通道的,这一点会在后面说明。
  
  四、客户端
  
  客户端主要做两件事,一是注册通道。这一点从图一就可以看出,Remoting中服务器端和客户端都必须通过通道来传递消息,以获得远程对象。第二步则是获得该远程对象。
  
  1、注册通道:
"Net Remoting基础篇2"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/12770.html


关键字:

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

站内搜索: 高级搜索

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