三层架构

 代码实现每种开发语言都不一样,大的概念是一样,但我们要讨论的就如以下列举的实战内容:  
    .NET   Remoting   系统是设计用来简化存在于不同应用程序域中的对象之间进行通信的一种体系结构。无论是不是在同一台计算机上。跟Web   Service很相似,只不过它们两种各有优点,各用于不同的场合。  
   
        .NET   Remoting   体系结构:  
   
  整个体系结构都是通过一个代理来完成的,这些是内部已经做好的,所以看上去好像没有这个代理似的。当用户产生一个远程类型的实例时,远端就创建了一个代理对象(其实也可以说是远端的一个COPY,因为代理对象的结构和拥有的方法都与远端相似)用户一旦在代理对象中调用一个方法并且该方法是合法的话,即由代理对象发送到服务端,调用服务器对象后,返回客户请求的结果到客户代理。而帮助它们之间进行通讯的就是管道了,主要是运送数据和打包相关协议,并发送到客户端。这是整个流程。  
   
  如图:  
   
   
                    返回                                                                     4   调用服务器对象  
      6|--------------------------^   |-----------------------|  
          |             1                                                                 |   |                                   3发送到         |  
  客户端-------------->产生代理对象-------->服务端  
          |                                                                         |       ^                                                                         |  
          |___调用其方法_____|__|__________________|    
                    2                                                                                       5返回  
   
          .NET   Remoting提供一大堆的服务:(只说其中几个)  
   
  1、对象激活和生命周期控制  
   
  2、负责从远程应用程序传输信息和传输信息到远程应用程序的通信管道  
   
  3、管道串行化消息(主要有两种:二进制和SOAP)串行化指将对象的状态转换为可以传输的形式  
   
        .NET   远程对象可以被配置成三种不同的类型:  
   
  1、Single   Call   Object(单次呼叫对象,我自己的理解,呵呵)即此对象被调用一次之后立即释放它,而且不     保存此对象的状态。当有某个客户方法被调用的时候,系统就创建一个新对象,之后释放,即每调用一次创建一个后又释放。  
   
  2、Singleeton   Object(单一对象)即所有客户请求都用一个对象来服务,只产生一个对象来服务多个请求。  
   
  3、Client-Activated   Object(客户激活对象)可理解为一对一的关系,即每来一个请求,创建一个对象来服务它,并且这种方式可以保存对象状态。  
   
  下面看段.NET   Remoting的代码:  
   
  ----------------------------------------------------------------------------------------------------  
  //引入必须的名空间,添加引用System.Runtime.Remoting和RemoteObject  
   
  using   System;  
  using   System.Runtime;  
  using   System.Runtime.Remoting;  
  using   System.Runtime.Remoting.Channels;  
  using   System.Runtime.Remoting.Channels.Tcp;  
  using   RemoteObject;  
  using   System.IO;  
   
  namespace   Server  
  {  
       
    class   ServerClass  
    {  
         
      static   void   Main(string[]   args)  
      {  
          ChannelServices.RegisterChannel(new   TcpServerChannel(9999));   //在9999端口监听  
  RemotingConfiguration.RegisterWellKnownServiceType(typeof(Remote),"Remote",WellKnownObjectMode.SingleCall);//并注册为单次呼叫类型的对象  
        Console.WriteLine("The   channel   has   been   registered!");  
        Console.ReadLine();  
      }  
    }  
  }  
  ----------------------------------------------------------------------------------------------  
  //同样导入必须的东西  
  using   System;  
  using   System.Runtime;  
  using   System.Runtime.Remoting;  
  using   System.Runtime.Remoting.Channels;  
  using   System.Runtime.Remoting.Channels.Tcp;  
  using   RemoteObject;  
   
  namespace   Client  
  {  
    /**//**//**   <summary>  
    ///   Class1   的摘要说明。  
    ///   </summary>  
    class   ClientClass  
    {  
      static   void   Main(string[]   args)  
      {  
        ChannelServices.RegisterChannel(new   TcpClientChannel());//注册一条管道与server通讯  
        Remote   r=(Remote)Activator.GetObject(typeof(Remote),"tcp://localhost:9999/Remote");//用Activator获取远端对象  
   
        Console.WriteLine(r.showdetails());  
        Console.WriteLine("Welcome   to   Presto   Systems");  
        Console.ReadLine();  
      }  
    }  
  }  
   
  ----------------------------------------------------------------------------------------------  
   
  using   System;  
   
  namespace   RemoteObject  
  {    
    public   class   Remote     :System.MarshalByRefObject               //继承MarshalByRefObject使它成为一个远程对象  
    {  
      public   string   showdetails()  
      {  
        return   "All   the   details   are   here";  
      }  
    }  
  }  
  ---------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值