• λ我爱Aspx >> Asp.Net >> Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
  • Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇

  • :aspxer  Դ:internet  :2007-5-15 20:46:10  ؼ:.net
  • //关闭指定名为MyTcp的通道;

    foreach (IChannel eachChannel in channels)

    {

    if (eachChannel.ChannelName == "MyTcp")

    {

    TcpChannel tcpChannel = (TcpChannel)eachChannel;

    //关闭监听;

    tcpChannel.StopListening(null);

    //注销通道;

    ChannelServices.UnregisterChannel(tcpChannel);

    }

    }

    代码中,RegisterdChannel属性获得的是当前已注册的通道。在Remoting中,是允许同时注册多个通道的,这一点会在后面说明。

    四、客户端

    客户端主要做两件事,一是注册通道。这一点从图一就可以看出,Remoting中服务器端和客户端都必须通过通道来传递消息,以获得远程对象。第二步则是获得该远程对象。

    1、注册通道:

    TcpChannel channel = new TcpChannel();

    ChannelServices.RegisterChannel(channel);

    注意在客户端实例化通道时,是调用的默认构造函数,即没有传递端口号。事实上,这个端口号是缺一不可的,只不过它的指定被放在后面作为了Uri的一部分。

    2、获得远程对象。

    与服务器端相同,不同的激活模式决定了客户端的实现方式也将不同。不过这个区别仅仅是WellKnown激活模式和客户端激活模式之间的区别,而对于SingleTon和SingleCall模式,客户端的实现完全相同。

    (1) WellKnown激活模式

    要获得服务器端的知名远程对象,可通过Activator进程的GetObject()方法来获得:

    ServerRemoteObject.ServerObject serverObj = (ServerRemoteObject.ServerObject)Activator.GetObject(

    typeof(ServerRemoteObject.ServerObject), "tcp://localhost:8080/ServiceMessage");

    首先以WellKnown模式激活,客户端获得对象的方法是使用GetObject()。其中参数第一个是远程对象的类型。第二个参数就是服务器端的uri。如果是http通道,自然是用http://localhost:8080/ServiceMessage了。因为我是用本地机,所以这里是localhost,你可以用具体的服务器IP地址来代替它。端口必须和服务器端的端口一致。后面则是服务器定义的远程对象服务名,即ApplicationName属性的内容。

    (2) 客户端激活模式

    如前所述,WellKnown模式在客户端创建对象时,只能调用默认的构造函数,上面的代码就说明了这一点,因为GetObject()方法不能传递构造函数的参数。而客户端激活模式则可以通过自定义的构造函数来创建远程对象。

    Ҷƪл˵?
  • һƪMicrosoft .Net Remoting系列专题之三:Remoting事件处理全接触
    һƪ一步一步学Remoting之四:承载方式