如何理解.NETRemoting-创新互联

如何理解.NET Remoting,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

站在用户的角度思考问题,与客户深入沟通,找到文登网站设计与文登网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、网页空间、企业邮箱。业务覆盖文登地区。

.NET Remoting是微软早期的分布式通信技术,虽然微软后来通过WCF通用基础通信框架整合掉了,但是通过回顾学习Remoting,反过来学习理解WCF也是很有帮助的。同时通过这篇博客的学习,可以看到Remoting技术的魅力。

先看一段Wiki百科对于WCF技术的概述。其中就提到了WCF、Web Service、Remoting、Socket等技术。在我提到这些名词的同时,你应该对这些技术有所了解并清楚这些技术所处于的层次。

Windows Communication Foundation (WCF)是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由.NET Framework 3.0开始引入,与Windows Presentation Foundation及 Windows Workflow Foundation并行为新一代Windows操作系统以及WinFX的三个重大应用程序开发类库。

在.NET Framework 2.0以及前版本中,微软发展了Web Service(SOAP with HTTP communication),.NET Remoting(TCP/HTTP/Pipeline communication)以及基础的Winsock等通信支持,由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如.NET Remoting可以开发SOAP, HTTP通信),对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在用户有许多不便。同时,服务导向架构(Service-Oriented Architecture)也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是Windows Communication Foundation。

其实在早期,还有一些其它的通信技术,比如:MSMQ(消息队列)、COM、COM+、DCOM等。COM是微软的重大发明,将复杂的通信细节封装到一个一个的COM组件中,让.NET程序员可以不用关心复杂的通信细节,只用操作通信模型就可以实现交互操作。

简单介绍就到这,回过头来看看Remoting的通信架构图:

如何理解.NET Remoting

从架构图可以看到,Remoting可以以对象代理的方式直接操作服务器端的对象的方法。

下面建一个最基本的项目来演示一下Remoting的使用。

先看一下项目的架构:

如何理解.NET Remoting

RemotingServer是一个Remoting服务端控制台项目;RemotingClient是一个Remoting客户端控制台项目;RemotingService是一个类库项目。

RemotingServer和RemotingClient都需要引用System.Runtime.Remoting这个组件。并且引用RemotingService这个类库项目。

RemotingServer中的代码:

static void Main(string[] args)
    {
        TcpServerChannel channel = new TcpServerChannel(8888);
                   
        ChannelServices.RegisterChannel(channel, false);
                   
        RemotingConfiguration.RegisterWellKnownServiceType(typeof(PersonIDConverter), "Hi", WellKnownObjectMode.SingleCall);
                   
        Console.WriteLine("Remoting服务已经启动");
        Console.ReadLine();
    }

RemotingClient中的代码:

static void Main(string[] args)
    {
        ChannelServices.RegisterChannel(new TcpClientChannel(), false);
              
        PersonIDConverter service = (PersonIDConverter)Activator.GetObject(typeof(PersonIDConverter), "tcp://localhost:8888/Hi");
              
        if (!object.Equals(service, null))
        {
            Console.WriteLine(service.PersonID15To18("130503670401001"));//测试×××号
        }
        Console.ReadLine();
    }

PersonIDConverter中的代码:

/// 
  /// 远程服务类,继承自MarshalByRefObject
  /// 
  public class PersonIDConverter : MarshalByRefObject
  {
      /// 
      /// ×××ID 15转18位
      /// 
      /// 15位×××号
      /// 18位×××号
      public string PersonID15To18(string id)
      {
          int iS = 0;
          int[] iW = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };//加权因子常数 
          string LastCode = "10X98765432";//校验码常数 
          string newId;//新×××号 
          newId = id.Substring(0, 6);
          newId += "19";//填在第6位及第7位上填上‘1’,‘9’两个数字 
          newId += id.Substring(6, 9);
         
          //进行加权求和 
          for (int i = 0; i < 17; i++)
          {
              iS += int.Parse(newId.Substring(i, 1)) * iW[i];
          }
         
          int iY = iS % 11; //取模运算,得到模值 
          newId += LastCode.Substring(iY, 1);//从LastCode中取得以模为索引号的值,加到×××的最后一位,即为新×××号。 
          return newId;
      }
  }

这里面提供了一个×××15位转18位的服务。

运行时先启动RemotingServer项目,然后运行RemotingClient项目。

服务端运行后:

如何理解.NET Remoting

客户端运行后:

如何理解.NET Remoting

可以看到15位×××号成功转为了18位,Remoting调用成功。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联网站制作公司行业资讯频道,感谢您对创新互联建站的支持。

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


名称栏目:如何理解.NETRemoting-创新互联
分享链接:http://azwzsj.com/article/gpied.html