分布式应用程序:基于.Net Framework的N层分布式应用开发



关键字:分布式、DCOM/CORBA、Web Service(Web 服务)、.Net Framework、N层模型、客户机/服务器、数据传输、远程通信

  主题:建立可维护、可扩展站点开发高效率、高伸缩性应用、创建N层分布式应用、实现跨平台、跨Internet应用集成是摆在无数开发者面前任务传统开发方式及技术面临了困难

  .Net Framework推出许多新技术为上述任务实现提供了相对简单解决方案其中基于SOAPWeb Service在处理分布式应用时具有比传统DCOM/CORBA明显优点结合基于WebASP.NET页面开发技术和SQL Server数据存储技术(或Xml文档)在.Net下开发N层应用也不再困难

  、分布式处理概述

  分布式处理是将应用逻辑分布到2台或者更多台计算机上在物理上或逻辑上分离单元中概念并不是新生事物在大型工程已经得到广泛使用只不过Internet出现为分布式处理赋予了新特征Internet内部连接特性可以让成百上千计算机为个任务工作使得在更大规模上实施分布式处理成为可能并跨越了传统B/S(客户机/服务器)模型

  分布式处理思想经历了很长过程区别IT时代开发人员、各级供应商做了大量工作使得支持分布式处理协议极为丰富

  1、 DCOM/CORBA

  在.Net Framework的前基于组件分布式计算主要协议是CORBA(Common Object Request Broker Architecture,通用对象请求代理结构)它来自Object Management Group(对象管理组)还有MicrosoftDCOM(Distributed Component Object Model分布式组件对象模型)

  DCOM是面向连接DCOM客户机持有对DCOM服务器连接这种连接方式导致了技术问题存在例如客户机可能持有引用信息只有在用户单击按钮时生成时间服务器就会因等待客户机请求而空闲当客户机崩溃而无法请求服务器时就会产生严重后果另外在Internet上DCOM或者CORBA服务器由数千台客户机使用由于每台客户机都有个和服务器连接对于很少使用服务器或者根本不再使用服务器客户机应该保护宝贵服务器资源

  尽管DCOM有办法处理这些问题但是增加了许多复杂性这也是Web服务试图解决问题的

  2、Web 服务

  随着Microsoft .Net Framewwork推出实现分布式处理有了新技术即Web Service(Web服务)Web服务能够为另个应用而不仅仅是浏览器提供数据并通过外置数据以允许其他客户机使用在同样端口和传输层都起作用标准协议(如HTTP)来执行操作

   2、Web Service-.Net Framework下分布式处理技术

  在.Net Framework中Web服务指是以独立于平台方式通过标准Web协议可以由访问应用逻辑单元

  .Net Framework开发者们将Web服务定位于基于开放标准能够用于任何平台使它拥有作为跨平台和跨供应商集成技术潜力实现了Web服务和Web服务构架后用户就可以利用Internet上许多现有技术Web服务成功关键在于它基于开放标准诸如Microsoft、IBM和Sun等主要供应商都支持这些标准

  1、DCOM/CORBA面临困难的解决方案--Web服务

  DCOM和CORBA在使用运行于相同平台软件Software和紧密管理局域网创建企业应用时非常优秀但是他们在创建跨平台 、跨Internet、适应Internet可伸缩性应用时力不从心他们不是为完成这些目标而设计

  大多数公司面临现实情况是他们拥有来自多个供应商多种平台运行于区别平台上应用系统间通信困难在和商务伙伴合作时基于传统分布式架构合作困难

  DCOM和CORBA问题是用户基本上要依赖个供应商如果要使用DCOM就必须使用Microsoft Windows来运行服务器和客户机尽管有其他平台上DCOM实现方式但是他们未被广泛采纳虽然CORBA是由多个供应商实现规范标准互操作性仍只能以简单方式完成至于DCOM和CORBA间集成就不必说了

  从技术方面看Web服务试图解决使用诸如CORBA和DCOM这样紧密捆绑技术时遇到问题这些问题包括如何通过防火墙协议复杂性异类平台集成等

  2、Web服务在分布式处理中应用

  Web服务是种优秀分布式处理技术

  下图演示了在.Net Framework下进行分布式处理般情形作为客户端应用可以是传统Windows Form应用、基于WebAsp.net应用、蜂窝式移动应用还可以是另外Web服务这些客户端应用构成N层模型中表示层(图中左列)用于数据显示中间列是中间层处理商务逻辑;右列是数据层处理数据存储



  随着个基于xml名为简单对象访问协议SOAP(Simple Object Access Protocol)不断标准化web服务正成为个可以和其他服务器和应用交互、可行思路方法

  3、N层模型下客户机消费Web服务

  下图演示了客户机消费Web服务情形客户机可以是个Web应用、另个Web服务、诸如Microsoft Word字处理



  Web服务消费者名为MethodWeb服务上思路方法实际向下层传播作为Soap消息通过网络并向上层传播到Web服务Web服务执行并响应(如果有话)

  实现Web服务和客户机的间双向通知或者发布/订阅功能是可能但是必须手工完成客户机可以实现自己Web服务并在对服务器中传递该Web服务引用服务器可以保存引用然后回调给客户机

   3、基于.Net FrameworkN层构架设计

  面向对象、基于模块化组件设计需要能够方便地修改应用各个部分完成这目标种好思路方法就是在层上工作个应用主要功能分离到区别层或者级中.Net Framework为创建可维护、可扩展层模式提供了丰富支持使得N层够架取代传统客户机/服务器模式而和Internet紧密结合

  1、分层模型

  从本质上讲层代表了个应用主要功能般地我们将应用功能分为 3个方面对应3层架构模式它们是数据层(data layer)、商务层(business layer)和表示层(presentation layer)



  数据层:包含数据存储和和它交互组件或服务这些组件和服务在功能上和中间层相互独立(尽管在物理上不必定相互独立--它们可以在同台服务器上)

  中间层:包括个或者多个组件服务它们应用商务规则、实现应用逻辑并完成应用运行所需要数据处理作为这个过程部分中间层负责处理来自数据存储或者发送给数据存储数据

  表示层:从中间层获得信息并显示给用户该层同时也负责和用户进行交互比较返回信息并将信息回送给中间层进行处理

  可见数据层从数据库中获得较为原始数据商务层把数据转换成符合商务规则有意义信息表示层把信息转换成对于用户有意义内容

  这种分层设计方式很有用层都可以独立地修改我们可以修改商务层不断地从数据层接受相同数据并把这些数据传递到表示层而不用担心出现歧义我们也可以修改表示层使得对于站点外观修改不必改动下面商务层逻辑

  2、常用N层模型设计

  已经知道个N层应用层不是由运行应用物理结构(硬件)定义层是应用运行个逻辑方面功能并定义应用将执行区别任务阶段这里N层设计和经典客户机/服务器架构截然区别

  1)、设计个简单3层

  最简单N层模型就是3层这里我们已经有个被网络分隔开服务器和客户机服务器中含有数据存储和组成数据层数据访问组件已经组成中间层商务逻辑客户机作为表示层只需要给应用提供界面即可



  在这个最简单情况中我们或许有个关系数据库或者组访问数据组件或者存储过程然后我们应当有个访问组件或者存储过程asp.net页面来提取信息处理和格式化信息使的适合于特定客户机然后通过网络将信息传送给客户机客户机所要做事情就是显示信息、收集用户输入和将信息回送给中间层

  2)、设计个更接近现实3层

  然而前面举例只是非常小应用般情况现实世界中很难碰到数据存储通常位于专门选择和经过专门设置硬件上它也许是在运行SQL Server基于Windows组服务器上但是也可能是运行非Windows平台或Oracle或者其他数据库服务器上



  在这种情况下数据层和中间层的间分离就更加显而易见--它们的间通过网络连接并且商务逻辑被限制在执行所有中间层数据处理服务器上

  3)、设计N层

  很明显上面情况都假定了两件事:是客户机为个低端设备(因此不参和应用中所需实际数据处理);另外就是只有组商务规则

  然而这些假设并不符合实际应用例如我们通常期望商务规则在其他某个地方而非在中间层中在提取数据过程前期实现某个商务逻辑比较恰当当然我们也可以在访问数据存储组件中实现商务逻辑这个商务逻辑\"包\"因此能和数据存储在同个服务器上或者甚至(在个分组环境中)在另外个中间路由服务器上

  另外为了充分利用\"胖客户机\"些性能以便减少网络负载和因访问路径循环而导致迟滞我们可以将些商务逻辑放在客户机上

  下图就显示了这种变化其中商务逻辑已经从中间层剥离并位于数据服务器或者客户机上



  可见这种模式没有中间存储并且几乎不需要中间数据处理所以效率更高

  4)、设计个更加现实N层

  般地我们使用个或者多个分离服务器来维持我们正在使用数据存储这时商务逻辑分布更为分散下图显示了由两个网络分离 3个机器可以看出现在商务逻辑被分为 3个区:些将和数据存储运行在同台服务器上些将在中间层服务器上运行还有些将在客户机上运行



  由此可以看到准确定义各个层并不容易\"中间层\"真正意思是商务逻辑本身并且商务逻辑区别元素可以无可非议地存在于区别服务器中

  3、.Net Framework下层间(远程)传输对象及技术

  .Net Framework实现了许多新技术以支持多层分布式处理它提供了丰富类库、对象及思路方法使得在区别层(物理上分离或仅仅是逻辑上分离)间数据传输更为简单

  1)、支持远程数据传送对象:

  l ADO.NET DataSet对象

  l ADO.NET DataTable对象

  l XmlDocument对象

  l XmlDataDocument对象

  2)、支持远程数据传送类/思路方法:

  l Serialization类

  Serialization类描述了个将数据转换为种能复制到另个过程格式对象过程前面提及可远程传输对象具有串行化整个内容能力以便它可以通过个通道来传送这个通道可以直接通过TCP/IP或者通过HTTP当然它们也可以在另端解除串行化因此客户机就得到个原对象完整副本

  l .Runtime.Remoting类

  .Runtime.Remoting命名空间提供对象可用来为对象创建代理以实现远程数据传送在这种情形下对象保留在服务器上并且客户机只收到个代理对象引用这个代理对象表示原来基于服务器对象(这就是我们怎样远程使用个DataReader思路方法)示意如下图:



  对于客户机这个代理提供了和原始对象相同思路方法和属性然而当客户机和代理对象相互作用时被自动串行化并通过通道(网络)传送给服务器上对象然后任何响应和结果通过通道被传送回客户机

  这两个远程技术都允许客户机使用原来在服务器上创建对象我们能够串行化个DataSet对象或者Xml文档同时我们也能串行化其它如集合这样对象--比如个哈希表(Hashtable)或(Array)

  4、N层模型中数据处理及对象选择

  首先需要考虑是希望从数据存储中提取出来数据做些什么?这个问题答案对我们所使用对象基本选择影响将比其他任何事情都要大甚至在某种程度上定义了我们希望完成任务性能种类

  1)、只用于显示数据

  如果只是想以种固定格式为终端用户显示数据般来说根本就没有必要远程传输数据我们没有必要在线上将所有数据传送给客户机--我们只能传给它们客户设备能接受任何格式最终显示信息



  在这种情形中\"Reader\"对象提供了种只读、仅向前理想且性能最优技术当和能实现服务器端数据绑定服务器Control控件起使用时我们可以获得个显示数据高效思路方法

  2)、需要远程传输数据

  然而如果我们需要远程传输数据话则存在个问题这些快速而高效\"Reader\"对象只在作为个引用时才能被远程传输个DataReader作为引用传送给个客户机时DataReader仍还在服务器上不过客户机应用也可以使用它在这种情况下我们实际上并没有远程传输数据而是使用了个远程传输对象在很多情况下都存在这种情况

  要实现数据远程传送应该将数据寄存到个能够存储(或保持)数据对象中并允许代码不需进入数据存储额外行程就可以根据需要提取数据并且多次读取在ADO.NET中这个对象就是DataSet对象(或者DataTable对象)当使用xml时也有几个对象供选择我们能够远程传输XmlDocument和XmlDataDocument对象这两个对象都有保持内容能力并且可以在个应用层的间进行传送

   4、N层分布式数据处理架构模型

  要进步理解怎样在应用中划分区别需要确定数据如何显示以及是否需要更新数据和向服务器及时返回更新

  1、全部在服务器上完成显示

  在客户机上显示数据最常见情形是在组或者多组服务器上执行所有数据处理数据层和中间层限于服务器客户机只提供显示接口对于个web浏览器来说通常格式为html对于个蜂窝式电话或类似设备来说可能是以wml格式表示等等

  下图使用个存储过程或SQL语句来提取所需要数据然后用asp.net进行处理或者执行个web服务另外这里也用xml片段形式从数据存储中提取数据然后对数据进行处理并提供给客户机



  如果以xml文档形式存储数据或者以这样种格式存储数据:数据作为xml外置数据层那么我们就有些其他选择

  下图显示了怎样提取和处理xml数据以便传送给客户机使用此外数据提取其实就是借助个\"Reader\"对象并且可以使用区别技术来处理数据并将数据提供给客户机



  2、扩展中间层

  虽然数据提取和处理经常在个对象里发生比如个Asp.Net页面但是为了有效利用由于使用基于组件设计而提供好处通常需要提供更为精细架构我们应该有在显示数据或者将其传送给客户机的前应用于数据商务规则换句话说它可能是安全原因也可能是为了实现分布式处理或者只是提供可重用性和使应用维护更加容易

  例如应该有访问个数据存储并提取系列消费者多个页面通过在个独立于asp.net页面或其他提供数据给客户机对象组件中建立这个过程我们能够提供个提取数据然后我们在将来需要在某些方面改变数据存储或者数据结构或者改变访问它规则我们只要用个新版本替换组件即可

  只要组件接口仍然未变所有使用这个接口应用将看到来自组件相同输出并和以前样继续运行然而组件在内部用来提取和处理来自数据存储数据思路方法可以根据需要进行相应修改下图示意了这种架构



  显然该过程可以使用多个组件如果数据提取相当复杂或者同数据运用在多个地方步分解数据处理(分解为更多组件层)就很有意义例如可用个组件将数据当作系列包含所有必须列行(以关键字顺序排列)这个组件就可以成为其他以区别顺序存储数据组件或者仅外置数据某些列组件数据源

  3、移动数据处理到客户机

  般地要获得发送给客户机数据我们将利用客户端脚本(JavaScript或 VBScript以及 WMLScript)、用Java或者个特定平台语言书写客户端组件或者用诸如Visual Basic 6.0、C、Delphi等语言书写客户端可执行等等当然所有我们需要功能都是.Net Framework部分(用户可通过下载和安装可重新分配Framework(大约5MB)在客户机上使用Framework)

  因此下面示意图显示了些用于实现获得发送给客户机数据并在客户机上进行处理思路方法



  4、将更新回送给服务器

  在许多情况下如果我们要求就是以种尽可能快速和高效方式获得发送给客户机依据那么上面举例能很好地完成任务然而许多应用要求客户机将数据回送以更新数据存储等操作时就需要寻找更合理模式

  至少有 3种思路方法用于向服务器端回送数据是回送Html表单和查询串(实现方式和以前ASP类似);另是客户端组件(例如IE5及以上版本XMLHTTP组件);还有就是客户端可执行Windows表单应用和服务等

  因此应该有这样种情况:客户机仅仅要求我们发送些数据并且我们让客户机完成所有数据处理也就是说客户机充当某种类型服务它将应用数据作为自己源数据来使用然后在它客户机已经处理数据后将更改提交回来

  旦客户端完成了数据更新或者已经收集了用户输入新数据客户机应用就以种合适格式打包数据(或者用正确技术整理数据)并将它提交给服务器进行处理和存储

  下图显示了利用\"胖客户机\"来实现这种架构思路方法其中数据在客户机上进行处理然后经整理后返回给服务器来更新原始数据存储



  仍然地这不是个包含所有可能性图表回送数据思路方法或许和发送数据思路方法没有什么联系你应该根据应用实际需求设计合适模型

   5、结束语

   建立可维护、可扩展站点开发高效率、高伸缩性应用、实现跨平台、跨Internet应用集成、创建N层分布式应用是摆在无数开发者面前任务传统开发方式及技术面临了困难

  .Net Framework推出许多新技术为这些任务实现提供了相对简单解决方案其中基于SOAPWeb Service在处理分布式应用时具有比传统DCOM/CORBA明显优点结合基于WebASP.NET页面开发技术和SQLServer数据存储技术(或Xml文档)在.Net下开发N层应用也不再困难



  要很好地完成以上任务你需要根据实际情况设计合理应用架构模型本文正是为了在这方面为你提供参考

Tags:  分布式应用开发 什么是分布式应用 分布式应用 分布式应用程序

延伸阅读

最新评论

发表评论