.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的通信架构图:

Center

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

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

先看一下项目的架构:

Center

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

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

RemotingServer中的代码:

1
2
3
4
5
6
7
8
9
10
11
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中的代码:

1
2
3
4
5
6
7
8
9
10
11
12
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中的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <summary>
   /// 远程服务类,继承自MarshalByRefObject
   /// </summary>
   public  class  PersonIDConverter : MarshalByRefObject
   {
       /// <summary>
       /// 身份证ID 15转18位
       /// </summary>
       /// <param name="id">15位身份证号</param>
       /// <returns>18位身份证号</returns>
       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项目。

服务端运行后:

Center

客户端运行后:

Center

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

更多细节信息参考官方网站:http://msdn.microsoft.com/zh-cn/library/xws7132e(v=vs.100).aspx



本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1345243

相关文章
|
网络安全 Windows 数据库
.Net Remoting的双向通信和Windows Service的宿主服务
原文:.Net Remoting的双向通信和Windows Service的宿主服务      作为微软分布式技术之一的.Net Remoting,从性能、安全等各方面来说都是相对比较稳定的,也是一项比较成熟的分布式技术。
895 0
|
网络协议 网络架构
.Net中Remoting通信机制
原文:.Net中Remoting通信机制 Remoting通信机制 Remoting介绍 主要元素 通道类型 激活方式 对象定义 Remoting介绍 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。
830 0
|
C# 网络协议
.Net中Remoting通信机制简单实例
原文:.Net中Remoting通信机制简单实例 .Net中Remoting通信机制 前言: 本程序例子实现一个简单的Remoting通信案例     本程序采用语言:c#   编译工具:vs2013工程文件   编译环境:.
812 0
.NET Remoting学习笔记(二)激活方式
原文:.NET Remoting学习笔记(二)激活方式 目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道   参考:百度百科  风车车.Net   激活方式概念 在访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化。
954 0
|
网络协议
.NET Remoting学习笔记(一)概念
原文:.NET Remoting学习笔记(一)概念 目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道  背景 自接触编程以来,一直听过这个名词Remoting,但是对他了解少之又少,近日有点时间,参考研究研究。
1130 0
|
网络协议 数据安全/隐私保护 网络架构
.NET Remoting学习笔记(三)信道
原文:.NET Remoting学习笔记(三)信道 目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道   参考:风车车.Net   .NET Framework 远程处理基础结构提供下列信道实现: IpcChannel TcpChannel HttpChannel IpcChannel IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。
930 0