基于NETRemoting技术并行计算程序的设计与实现设计说明_第1页
基于NETRemoting技术并行计算程序的设计与实现设计说明_第2页
基于NETRemoting技术并行计算程序的设计与实现设计说明_第3页
基于NETRemoting技术并行计算程序的设计与实现设计说明_第4页
基于NETRemoting技术并行计算程序的设计与实现设计说明_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于.NET Remoting技术并行计算程序的设计与实现39 / 47基于.NET Remoting技术并行计算程序的设计与实现摘要随着人类科学技术的日益进步,人们需要解决很多大型的、复杂的问题,这些问题的解决通常都需要非常巨大的计算量。为此.NET Framework Remoting技术为并行计算程序的编写提供了简单、灵活编程手段,大大降低了编程难度。所以,运用.NET Remoting技术实现并行运算,提高计算能力,具有重要意义。本系统使用.NET Framework Remoting并行技术来解决旅行商问题。介绍.NET Framework Remoting技术,阐释了并行计算的概念

2、,给出了并行计算中的消息传递机制与网络环境下并行计算程序的基本编程方法。同时,通过串行计算和并行计算的时间和性能等方面的对比分析,了解并行计算在提高计算能力方面的优势。这里主要是使用VS2010软件中的.NET Remoting技术实现客户端和服务器的通信,并联合多台客户端服务器,利用分支限界法并行计算解决旅行商问题。关键词:.NET Remoting;并行计算;旅行商问题DESIGN AND IMPLEMENTATION OF PARALLEL CALCULATION PROGRAM BASED ON .NET REMOTING TECHNOLOGYAbstractWith the prog

3、ress of human science and technology, people need to solve a lot of large, complex problems, to solve these problems usually require a very large amount of computation. So, .NET Framework Remoting technology programs written for parallel computing provides a simple and flexible programming tool whic

4、h greatly reduces the difficulty of programming. Therefore, the use of .NET Remoting technology to achieve parallel computing and increased computing power has important significance.The system uses .NET Framework Remoting parallel technology to solve the traveling salesman problem. Introduction .NE

5、T Framework Remoting technology, interpretation of the concept of parallel computing, given parallel computing basic programming procedures under the mechanism of parallel computing and network environment Messaging. At the same time, through the comparison and analysis in computing time and perform

6、ance between serial computing and parallel computing, try to understand the advantage of parallel computing in improving computational efficiency.Hereis the realization ofcommunication between client andserverusing.NETRemoting technologyin VS2010 software,andcombined witha plurality of clientserver,

7、using thebranch and bound method ofparallel computingto solve the traveling salesman problem.Key words: .NET Remoting; Parallel computing; Traveling salesman目录第1章绪论11.1课题背景11.2 国外研究现状11.2.1 并行计算11.2.2 .NET Remoting21.3 开发工具与技术21.3.1 VS201021.3.2 MySql31.4 小结3第2章并行计算52.1 并行计算的定义52.2 并行计算的主要研究目标和研究容52

8、.2.1 并行计算的主要研究目标52.2.2 并行计算的主要研究容62.3 并行算法62.4 分布式并行计算72.4.1 多计算机的分布式并行计算72.4.2 单计算机的并行计算72.5 小结8第3章 .NET Remoting技术93.1 .NET Remoting技术的简介93.2 .NET Remoting技术的主要元素103.3 .NET Remoting的两种通道123.4 .NET Remoting的激活方式133.5 .NET Remoting的对象定义133.6 补充143.6.1 注册多个信道143.6.2 客户端订阅服务器事件143.7 小结14第4章 .NET Remot

9、ing框架的构建154.1 创建远程对象类154.2 服务器端164.2.1 确定使用的信道164.2.2 注册信道164.2.3 注册远程对象164.2.4 注销信道164.3 客户端164.3.1 创建、注册信道174.3.2 发现URL174.3.3 创建对象与获取远程对象代理174.3.4 注销信道184.4 事件调用184.4.1 服务器注册客户端事件184.4.2 客户端注册服务器事件184.5 小结20第5章解决实际问题215.1旅行商问题简介215.2旅行商问题研究历史215.3旅行商问题问题分析215.4分支限界法简介225.4.1常见的两种分支限界法225.4.2分支限界法

10、的设计思路225.4.3旅行商问题分支限界法的程序实现225.5 程序的运行和正确性265.5.1 程序的运行265.5.2 程序的正确性305.6 测试、记录、分析与结论305.6.1 测试、记录与分析305.6.2 结论345.7 小结34第6章结语356.1 总结356.2 展望35致37参考文献39第1章 绪论1.1课题背景 随着现代计算机科学技术的发展和进步,人们对于高性能计算机的需求越来越强烈,但在物理条件和现有的计算机体系结构下,单纯的通过提高处理器计算能力的方法已到达了极限。在这种情况之下,采用并行计算方法将成为提高计算能力的重要手段。 并行计算是指同时利用多种计算资源来解决计

11、算问题的方法,是提高计算机计算速度和处理能力的一种十分有效手段。并行计算的基本思想是采用多个处理器来协同合作,共同计算求解同一问题,即将需要被求解的问题分成若干个部分,各个部分均由一个独立的处理器来计算。并行计算系统可以指专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。 .NET Remoting技术是.NET Framework提供的一种优秀的分布式应用开发技术,具有高效、可扩展、易于配置、支持多事务、可与其它分布式应用技术协作、能在Internet上运行等特点。Windows平台下的.N

12、ET Framework Remoting技术,为开发分布式并行计算提供了方便、灵活、简单的手段,可以屏蔽分布式编程所需要处理的通信、协议、消息传输等细节,使分布式编程与本地编程具有一样的界面,为本地计算和远程分布式计算提供了一个一致的面向对象的编程环境,使开发分布式计算如同开发本地计算一样,这就大大降低了开发分布式并行计算的难度。随着人类科学技术的不断进步,有很多大型的、复杂的问题需要人们去解决。但是这些问题通常都十分的复杂,需要非常巨大的计算量。在现代计算机的体系结构和物理条件下,解决这些问题需要非常长的计算时间,计算效率非常低下,这样很不合理。但使用并行计算就可以利用多台计算机的计算能力

13、,大提高了计算速度和效率。大型复杂的问题的处理就变得很高效和低成本了。并行计算的编程并不简单,对编程者有着非常高的要求。为此,Windows平台下的.NET Framework Remoting技术为并行计算程序的编写提供了简单、灵活编程手段,大大降低了编程难度。所以,运用.NET Remoting技术实现并行运算,提高计算能力,具有重要意义。1.2 国外研究现状1.2.1 并行计算并行计算是指同时利用多种计算资源来解决计算问题的方法,是提高计算机计算速度和处理能力的一种十分有效手段。并行计算的基本思想是采用多个处理器来协同合作,共同计算求解同一问题,即将需要被求解的问题分成若干个部分,各个部

14、分均由一个独立的处理器来计算。现在,并行计算算法的设计一般以MIMD类为主流,并且需要有可移植性和可扩展性。但是随着微处理器的发展,网络互联速度的提升,并行计算算法的设计必须兼顾两个发展方向才能获取可扩展高性能:一是可移植、可扩展的大粒度任务级并行;二是,在各个进程中,需要设计便于发挥单机性能的合理的通信方式、数据结构和程序设计等。只有兼顾了这两个方面,才能真正发挥微处理器和互联网络所构成的并行计算系统的潜在性能。为利用并行计算,通常计算问题表现为以下特征:(1)将工作分离成离散部分,有助于同时解决;(2)随时并与时地执行多个程序指令;(3)多计算资源下解决问题的耗时要少于单个计算资源下的耗时

15、。并行计算是相对于串行计算来说的,所谓并行计算分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。空间上的并行导致了两类并行机的产生,按照Flynn的说法分为:单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。我们常用的串行机也叫做单指令流单数据流(SISD)。MIMD类的机器又可分为以下常见的五类:并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)。1.2.2 .NET RemotingRemoting是一种分布式处理方式。从微软的产品角度来看,

16、可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的。首先,客户端通过Remoting,访问通道以获得服务端对象,再通过代理解析为客户端对象。这就提供一种可能性,即以服务的方式来发布服务器对象。远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象),然后客户端再通过Remoting连接服务器,获得该服务对象并通过序列化在客户端运行。在Remoting

17、中,对于要传递的对象,设计者除了需要了解通道的类型和端口号之外,无需再了解数据包的格式。这既保证了客户端和服务器端有关对象的松散耦合,同时也优化了通信的性能。1.3 开发工具与技术1.3.1 VS2010Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了NET Framework4.0、Microsoft Visual Studio 2010 CTP( Community Technology Pr

18、eview-CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持IBMDB2和Oracle数据库。它的新功能主要包括:应用程序生命周期(ALM)、C# 4.0动态类型和动态编程、多显示器支持、支持TDD、支持Office开发、Quick Search特性、C+ 0x新特性、新增基于.NET平台的语言 F#等。除了上述功能外还在以下方面进行了改进:增强和完善了Visual Studio IDE;改进了Visual Basic和C#语言,开发人员可以根据自己的爱好选择任意一种语言;同时还包括一种新的.NET Framework语言:F#;支

19、持基于MVC的Web应用,改进了代码编写的速度,简化了Web开发;改进了对WPF和Silverlight应用程序的开发;当然最重要的变化是完善了Visual C+功能。Visual Studio 2010能成为新一代的经典开发工具的特点有如下几个:(1)未来代码管理工具比平台更重要;(2)灵活高效的全新IDE;(3)助力Azure平台,强化云计算能力;(4) 提升并行计算,应对多核趋势;(5)快速开发,跨越开发周期协作;1.3.2 MySqlMySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。Mysql是最流行的关系型数据库管理系统,在WEB应用方面

20、MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySql的系统特性有:(1)支持多线程,充分利用CPU资源;(2)优化的SQL查询算法,有效地提高查询速度;(3)既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中;(4)提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名;(5)提供TCP/IP、ODBC和JDBC等多种数据库连接途径;(6)提供用于管理、检查、优化数据库操作的管理工具;(7)支持

21、大型的数据库。可以处理拥有上千万条记录的大型数据库;(8)支持多种存储引擎;(9)Mysql是开源的,所以你不需要支付额外的费用;(10)MySQL使用标准的SQL数据语言形式。1.4 小结本章对.net Remoting技术的背景原因与它的意义进行了介绍,阐述了.net Remoting技术在国外的发展现状。还对并行计算的开发工具VS2010以与数据库MySql进行了简单的介绍,为后面系统的设计提供了方便。第2章 并行计算并行计算是伴随并行机的出现,在近30年来发展较迅速的一门交叉学科,涵盖的容非常广泛。2.1 并行计算的定义并行计算(Parallel Computing)是指同时使用多种计

22、算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。1. 特征为利用并行计算,通常计算问题表现为以下特征:(1)将工作分离成离散部分,有助于同时解决;(2)随时并与时地执行

23、多个程序指令;(3)多计算资源下解决问题的耗时要少于单个计算资源下的耗时。并行计算是相对于串行计算来说的,所谓并行计算分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。2. 基本体系结构并行计算科学中主要研究的是空间上的并行问题。从程序和算法设计人员的角度来看,并行计算又可分为数据并行和任务并行。一般来说,因为数据并行主要是将一个大任务化解成一样的各个子任务,比任务并行要容易处理。空间上的并行导致了两类并行机的产生,按照Flynn的说法分为:单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。我们常用的串行机也叫做单指令流单

24、数据流(SISD)。MIMD类的机器又可分为以下常见的五类:并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)。2.2 并行计算的主要研究目标和研究容2.2.1 并行计算的主要研究目标对于具体的应用问题,采用并行计算技术的主要目的在于以下2个方面:(1)加快求解问题的速度,缩短求解问题所需的时间。(2)提高求解问题的规模,解决计算量巨大的复杂问题。并行计算之所以必需,主要在于,当前的单处理器性能不可能满足大规模科学与工程计算与商业应用的需求,并行计算是目前唯一能满足实际大规模计算需求的支撑技术。当前较为先进的微处理

25、器,其峰值性能也仅为60亿次/秒。近两年,微处理器的峰值性能也不会超过100亿次/秒。并行计算之所以可行,主要在于,并发性是物质世界的一种普遍属性,具有实际应用背景的计算问题在许多情况下都可以分解为能并行计算的多个子任务。综上所述,并行计算的主要目标在于在并行机上,解决一批具有重大挑战性计算任务的科学、工程与商业计算问题,满足不断增长的应用问题对速度和存资源的需求。2.2.2 并行计算的主要研究容并行计算的主要研究容大致可分为以下4个方面:(1)并行机的高性能特征抽取。(2)并行算法设计与分析。(3)并行实现技术,主要包含并行程序设计和并行性能优化。(4)并行应用。以上4个部分相互耦合,缺一不

26、可。需要说明的是,并行计算不同于分布式计算。后者主要是指,通过网络相互连接的2个以上的处理机相互协调,各自执行相互依赖的不同的应用,从而达到协调资源访问,提高资源只用效率的目的。但是,它无法达到并行计算所倡导的提高求解同一个应用的速度,或者提高求解同一个应用的问题规模的目的。2.3 并行算法并行算法是适合在并行机上实现的算法,一个好的并行计算应该具备充分发挥并行机潜在性能的能力。并行算法作为应用程序开发的基础,在并行计算机应用中具有举足轻重的地位。目前,并行算法根据运算基本对象的不同可分为:(1)数值并行算法,主要为数值计算方法而设计的并行算法;(2)非数值并行算法,主要为符号运算而设计的并行

27、算法。根据并行进程间相互执行顺序关系的不同可分为:(1)同步并行算法,进程间由于运算执行顺序而必须相互等待的并行算法;(2)异步并行算法,进程间执行相对独立,不需要相互等待的一种算法;(3)独立并行算法,进程间执行是完全独立的,计算的整个过程不需要任何通信。根据各进程承担的计算任务粒度的不同,可分为:(1)细粒度并行算法,通常指基于向量和循环级并行的算法;(2)中粒度并行算法,通常指基于较大的循环级并行;(3)大粒度并行算法,通常指基于子任务级并行的算法,这也是当前并行算法设计的主流。在这里,我使用的并行算法也是当前并行算法的主流算法,也就是大粒度并行算法。2.4 分布式并行计算分布式并行计算

28、大致可以从以下2个不同点去考虑:2.4.1 多计算机的分布式并行计算顾名思义,多计算机的分布式并行计算就是利用多台计算机,通过网络连接到一起,在计算机之间传递数据和消息,使各个计算机一起计算大型复杂问题的一个或多个子问题,最后汇总得出结果的计算方式。在这种计算方式下,其最大的特点就是在网络中传输数据。多台计算机分布式并行计算的连接和数据交互可以通过发送数据到服务器,服务器广播数据给各个客户端的方式进行。如图2-1所示:图2-1 多台计算机并行计算连机交互示意图在网络中传输数据,原本有很多复杂的步骤,对编程者有着很高的要求,但是微软的.NET Remoting技术,将消息的传递机制都封装的很好,

29、大大降低了编程者对Remoting编程的难度。关于具体的消息传递机制等都将在之后的章节中讲述到。在多计算机的分布式并行计算中,一般一台计算机含有一个CPU,当然也可以含有多个CPU,日常生活中多CPU的计算机并不常见。多个计算机的并行计算,需要好废一定时间来传输数据,因此,当问题的计算量不大时,多计算机的分布式并行计算并不能体现计算效率方面的优势;而当问题复杂,计算量要求非常大时,多计算机的分布式并行计算就能体现其应有的效率优势,参与并行计算的处理器越多,计算效率也就越高。2.4.2 单计算机的并行计算单计算机的并行计算,一般指同一台机器上的多线程并行计算。这种并行计算不需要在网络间传输数据,

30、可以大大减少消息在网络中传输的时间,整体协调和调度开销大大减少,变相的提高了计算效率。由于多线程并行计算仍是处于同一个操作系统中的,所以线程之间的协调有更加灵活的控制机制:可以使用系统部的消息传递机制,也可以使用全局变量作为标记来识别,还可以通过自定义事件来响应各个线程的运行。由于多线程并行计算是基于单机实现的,而单机存在存资源的瓶颈限制,所以在进行多线程并行计算时,各个线程的计算模块所使用的大量的数据块,应该尽量使用地址参数传递。要注意的是,当一个线程完成计算任务之后,并不会自动释放该实例,需要在程序中调用方法释放存。单计算机的并行计算也分为下面两种情况:(1)单机多CPU单机多CPU的并行

31、计算对计算机的要求很高,因为它需要一台计算机上有多个CPU,而日常使用的计算机一般都是单CPU的。多个CPU分别处理大型复杂任务的一个或几个子任务,最后将结果汇总得出答案。这种方式可以真正提高计算效率,充分利用多CPU资源,协同合作共同计算完成任务。但是这对计算机的硬件要求比较苛刻。(2)单机单CPU日常生活中,我们常用的计算机就是单机单CPU多核的,单机单核单CPU的机器也逐渐退出了历史的舞台。多核CPU比单核CPU的计算速度快,原因是单核CPU只能利用仅有的一个核处理一个指令,而多核CPU可以利用CPU部多个核同时处理一条指令,从而加快计算机的运算速度。这种加速也不是成倍加速的,即双核CP

32、U的计算速度其实并没有原来的200%的计算速度,而是有所折扣的。单CPU多核的计算机,也可以启用多个线程进行并行计算,但是这种计算是有瓶颈的。在计算问题不是非常复杂时,每个线程需要处理的任务在CPU承受的围,此时,并行计算可以提高计算效率,但这不算是真正的并行计算,但是使用的方法和并行计算有相似之处。当处理的任务非常大时,单CPU就无法再通过增加线程数量来提高计算效率了。计算效率也将受到物理存的限制。2.5 小结这一章先讲了并行计算的概念,接着讲了并行计算的研究目标和研究容,按照不同的对象将并行算法进行分类,最后对分布式并行计算的几种方式进行了分析,在这里我主要研究的就是多计算机的并行计算问题

33、。对并行计算进行事先了解,有助于之后利用并行计算的算法思想解决实际问题。第3章 .NET Remoting技术3.1 .NET Remoting技术的简介.NET Remoting是微软随.NET推出的一种分布式应用解决方案,被誉为管理应用程序域之间的RPC的首选技,它允许不同应用程序域之间进行通信。更具体的说,Microsoft .NET Remoting提供了一种允许对象通过应用程序域与另一对象进行交互的框架。也就是说,使用.NET Remoting,一个程序域可以访问另外一个程序域中的对象,就好像这个对象位于自身部,只不过,对这个远程对象的调用,其代码是在远程应用程序域中进行的,例如在本

34、地应用程序域中调用远程对象上一个会弹出对话框的方法,那么,这个对话框,则会在远程应用程序域中弹出。.NET Remoting框架提供了多种服务,包括激活和生存期支持,以与负责与远程应用程序进行消息传输的通讯通道。格式化程序用于在消息通过通道传输之前,对其进行编码和解码。应用程序可以在注重性能的场合使用二进制编码,在需要与其他远程处理框架进行交互的场合使用XML编码。在从一个应用程序域向另一个应用程序域传输消息时,所有的XML编码都使用SOAP协议。出于安全性方面的考虑,远程处理提供了大量挂钩,使得在消息流通过通道进行传输之前,安全接收器能够访问消息和序列化流。图3-1 .NET Remotin

35、g协同工作能力图3-2是.NET Remoting的体系结构图:图3-2 .NET Remoting通信体系结构3.2 .NET Remoting技术的主要元素一般来说,.NET Remoting包括如下几点主要元素:1.远程对象运行在Remoting服务器上的对象。客户端通过代理对象来间接调用该对象的服务,如上图的“通信体系结构”所示。在.NET Remoting体系中,要想成为远程对象提供服务,该对象的类必须是MarshByRefObject的派生对象。另外,要说明的是,需要在网络上传递的对象,例如“参数”,则必须是可序列化的。2.信道信道是服务器和客户机进行通信用的(这里的服务器和客户机

36、并不一定都是计算机,也可能是进程)。在.NET Remoting中,提供了三种信道类型:TCP、 、IPC,另外,也可以定制不同的信道以适应不同的通信协议(至于如何定制,我尚未涉与到,因此,不好说)。3.消息客户机和服务器通过消息进行信息交换,消息在信道中传递。这里的消息包括,远程对象的信息,调用方法名称,参数,返回值等。4.格式标识符该标识符标明了消息是按照什么样的格式被发送到信道上的,目前.NET 2.0提供了两种格式标识符:SOAP格式和二进制格式。SOAP格式标识符符合SOAP标准,比较通用,可以和非.NET框架的Web服务通信。二进制格式标识符,则在速度、效率上面更生一筹,但通用性较

37、SOAP差。另外,Remoting还支持自定义的格式标识符。其中,TCP信道,默认使用二进制格式传输,因为这个效率更高; 信道则默认使用SOAP格式;不过在系统中,哪种信道具体使用哪种格式,则是可以根据需要设置的。5.格式标识符提供程序它用于把格式标识符和信道联系起来。在创建信道时,可以指定所要使用的标识符提供程序,一旦指定了提供程序,那么消息被发送到信道上的格式也就确定了下来。为序列化消息,.NET Remoting提供了两类格式程序接收器:BinaryFormatter和SoapFormatter。选择的类型很大程度上取决于连接分布式对象的网络环境的类型。由于. NETRemoting体系

38、结构的可插入特性,可以创建自己的格式程序接收器,并插入到.NET Remoting基础设施中。这种灵活性使基础设施能够支持可能的各种线路格式。对于可以发送并接收二进制数据(例如TCP/IP)的网络传输协议,可以使用System.Runtime.Serialization.Formatters.Binary名字空间中定义的BinaryFormatter类型。顾名思义,BinaryFormatter将消息对象序列化为一个二进制格式的流。这是消息对象在线缆间进行传输的最有效而简洁的表示方式。一些网络传输系统不允许发送和接收二进制数据。这类传输迫使应用程序在发送之前将所有的二进制数据转换成ASCII文

39、本表示形式。在这种情况下(或者要得到最佳协作能力的时候),.NET Remoting在System.Runtime.Serialization.Formatters.Soap名字空间中提供SoapFormatter类型。SoapFormatter使用消息的SOAP表示形式将消息序列化为流。6.代理对象前面也说过,客户端不能直接调用远程对象,客户机只能通过代理对象来操作远程对象。代理对象,又分为透明代理和真实代理。在客户机看来,代理对象和远程对象是一样的。客户机调用透明代理对象上的方法,透明代理再调用真实代理上的Invoke方法,Invoke方法再使用消息接受器把消息传递到信道上。图3-3是客户

40、机的方法调用导致消息在信道间传递的一个体系结构图:7.消息接受器如上图所示,消息接受器在服务器端和客户端都有,接受真实代理的调用,把序列化的消息发布到信道上。图3-3 消息在信道上的传递过程8.激活器这涉与到对象生命期管理,客户机使用激活器在服务器上创建远程对象,或者说是申请一个远程对象的引用。9.RemotingConfiguration类该类用于配置远程服务器和客户机的一个实用类,它可以用于读取配置文件或者动态地配置远程对象。说明一点的是:RemotingConfiguration类中的大部分属性、方法都是静态的,这就意味着很多属性,如应用程序名称,只能通过当前属性或配置文件设置一次。如果

41、应用程序运行在宿主环境中,例如Internet信息服务(IIS),则可能已经设置了该值(通常将其设置为虚拟目录)。如果未设置应用程序名称,则当前属性将返回空引用10.ChannelServices类该类用于注册信道,并把消息分派到信道上。3.3 .NET Remoting的两种通道Remoting的通道主要有两种:Tcp和 。在.Net中,System.Runtime.Remoting.Channels中定义了 IChannel接口。IChannel接口包括了TcpChannel通道类型和 通道类型。它们分别对应Remoting通道的这两种类型。TcpChannel类型放在名字空间System

42、.Runtime.Remoting.Channels.Tcp中。Tcp通道提供了基于Socket 的传输工具,使用Tcp协议来跨越Remoting边界传输序列化的消息流。TcpChannel类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。 Channel类型放在名字空间System.Runtime.Remoting.Channels. 中。它提供了一种使用 协议,使其能在Internet上穿越防火墙传输序列化消息流。默认情况下, Channel类型使用Soap格式序列化消息对象,因此它具有更好的互操作性。通常在局域网,我们更多地使用TcpChannel;如果要穿越防火墙,则应该

43、使用 Channel比较好。3.4 .NET Remoting的激活方式在访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化。这种客户端通过通道来创建远程对象,称为对象的激活。在Remoting中,远程对象的激活分为两大类:服务器端激活和客户端激活。服务器端激活,又叫做WellKnow方式。服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上来发布这个类型。然后该服务器进程会为此类型配置一个WellKnown对象,并根据指定的端口或地址来发布对象。客户端激活。与WellKnown模式不同, Remoting在激活每个对象实例的时

44、候,会给每个客户端激活的类型指派一个URI。客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。SingleCall模式和客户端激活模式是有区别的:首先,对象实例创建的时间不一样。客户端激活方式是客户一旦发出调用的请求,就实例化;而SingleCall则是要等到调用对象方法时再创建。其次,SingleCall模式激活的对象是无状态的,对象生命期的管理是由GC管理的,而客户端激活的对象则有状态,其生命周期可自定义。其三,两种激活模式在服务器端和客户端实现的方法不一样。尤其是在客户端,SingleCall模式是由 GetObject()来激活,它调用对象默认的构造函数。而客户端

45、激活模式,则通过CreateInstance()来激活,它可以传递参数,所以可以调用自定义的构造函数来创建实例。3.5 .NET Remoting的对象定义前面讲到,客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。因此在Remoting中,对于远程对象有一些必须的定义规要遵循。由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject。MSDN对 MarshalByRefObject的说明是:MarshalByRefObject 是那些通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类。不是从 Marsh

46、alByRefObject 继承的对象会以隐式方式按值封送。当远程应用程序引用一个按值封送的对象时,将跨越远程处理边界传递该对象的副本。因为您希望使用代理方法而不是副本方法进行通信,因此需要继承MarshallByRefObject。在Remoting中能够传递的远程对象可以是各种类型,包括复杂的DataSet对象,只要它能够被序列化。远程对象也可以包含事件,但服务器端对于事件的处理比较特殊,我将在本系列之三中介绍。3.6 补充3.6.1 注册多个信道在Remoting中,允许同时创建多个通道,即根据不同的端口创建不同的通道。但是,Remoting要求通道的名字必须不同,因为它要用来作为通道的

47、唯一标识符。虽然IChannel有ChannelName属性,但这个属性是只读的。因此前面所述的创建通道的方法无法实现同时注册多个通道的要求。3.6.2 客户端订阅服务器事件实际上,我们可以用一个trick,来欺骗Remoting。这里所说的替代类就是这个trick了。既然是提供服务,Remoting传递的远程对象其实现的细节当然是放在服务器端。而要在客户端放对象的副本,不过是因为客户端必须调用构造函数,而采取的无奈之举。既然具体的实现是在服务器端,又为了能在客户端实例化,那么在客户端就实现这些好了。至于实现的细节,就不用管了。如果远程对象有方法,服务器端则提供方法实现,而客户端就提供这个方法

48、就OK了,至于里面的实现,你可以是抛出一个异常,或者return 一个null值;如果方法返回void,那么里面可以是空。关键是这个客户端类对象要有这个方法。这个方法的实现,其实和方法的声明差不多,所以我说是一个trick。方法如是,构造函数也如此。3.7 小结本章从 .NET Remoting技术的定义、 .NET Remoting技术的主要元素、通道与激活方式对这个 .NET Remoting技术进行了详细的介绍,最后补充说明注册信道方法,有利于理解这个技术,同时利用.NET Remoting技术构建框架,解决实际的复杂问题。第4章 .NET Remoting框架的构建对.NET Remo

49、ting技术有了一定的了解之后,就可以开始.NET Remoting框架的构建了。4.1 创建远程对象类客户端在获取服务器端对象时,并不是获得实际的服务端对象,而是获得它的引用。因此在Remoting中,对于远程对象有一些必须的定义规要遵循。由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject。MarshalByRefObject 是那些通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类。不是从 MarshalByRefObject 继承的对象会以隐式方式按值封送。当远程应用程序引用一个按值封送的对象时,将跨越远程处理边界传

50、递该对象的副本。这里我需要使用代理方法而不是副本方法进行通信,因此需要继承MarshallByRefObject。public delegate void MyDelegate(string msg);public class NetRmtObject : MarshalByRefObject public event MyDelegate SubscribeAtServer;/在客户端触发,在服务器订阅的事件 public event MyDelegate SubscribeAtClient;/在服务器触发,在客户端订阅的事件/无限生命周期public override object Ini

51、tializeLifetimeService() return null;/服务器触发事件public void TriggerAtClient(string msg) if (SubscribeAtServer != null) SubscribeAtServer(msg);/客户端触发事件public void TriggerAtServer(string msg) if (SubscribeAtClient != null) SubscribeAtClient(msg);/获取委托列表public Delegate GetServerEventList() return this.Sub

52、scribeAtClient.GetInvocationList();4.2 服务器端4.2.1 确定使用的信道.NET Remoting提供了三种预定义的信道:TCP、 、IPC,他们各有自己的特点,根据自己需要进行选择。对于每个信道,都有一些可以配置的信息。4.2.2 注册信道 注册信道就是把已经创建的信道,使用ChannelServices类的RegisterChannel方法来“向信道服务注册信道”。/信道端口IDictionary idic = new Dictionary();idicport = 8080;/注册信道TcpChannel tcpchannel = new TcpC

53、hannel(idic, clientProvider, serverProvider);ChannelServices.RegisterChannel(tcpchannel, false);4.2.3 注册远程对象服务器端打算发布一个可以被客户端调用的远程对象,那它必须以某种方式“告诉”系统:我这里有一个这样的服务可供你使用。这里的“告诉”的过程,就是注册远程对象。CityObject marshal_city_obj;NetRmtObject marshal_obj;/服务器获取远程对象marshal_obj = new NetRmtObject();/传输string类型变量的对象Obj

54、Ref objRef = RemotingServices.Marshal(marshal_obj, url);marshal_city_obj = new CityObject();/传输DataTable类型变量的对象ObjRef cityObjRef = RemotingServices.Marshal(marshal_city_obj, url1);4.2.4 注销信道在程序关闭时,或者清理资源时,要关闭调已经注册的信道,这样好让出服务所使用的计算机端口,方法就是调用ChannelServices.UnregisterChannel即可实现。4.3 客户端4.3.1 创建、注册信道客户

55、端的信道注册,跟服务器端的注册基本一样,差别在于它不必指定端口,和服务器端对应的,则使用TcpClientChannel、 ClientChannel类等,当然也可以使用TcpChannel、 Channel类来注册。在创建了信道后,也是使用ChannelServices类的RegisterChannel方法来完成信道的注册。/信道端口IDictionary idic = new Dictionary();idicport = 0;/注册信道TcpChannel tcpchannel = new TcpChannel(idic, clientProvider, serverProvider);

56、ChannelServices.RegisterChannel(tcpchannel, false); 客户端的端口号不能与服务器一致,否则将出现通常每个套接字地址(协议/网络地址/端口)只允许使用一次的异常,将其设置为0,则客户端自动选择可用的端口。4.3.2 发现URL客户端要激活服务器上的远程对象,也就是说要获得一个远程对象的本地代理,则必须首先获得远程对象的URL。该URL和Web浏览器的URL具有一样的含义,具有如下的格式:Protocol:/server:port/URI这里的协议,也就是信道的格式,如tcp、 、ipc。不过,由于IPC机制只能使用在单个机器上,因此,不需要使用服务器地址。4.3.3 创建对象与获取远程对象代理创建对象,也就是在客户端激活服务器上的对象,并获得这个远程对象的一个本地代理(透明代理)。在客户端创建远程对象,有两种方法,一种是使用new方法来创建,另外一种方法则是使用激活类的Activator的创建方法。/获取代理try obj = (NetRmtObject)Activato

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论