.NET分布技术

2024-09-29

.NET分布技术(共7篇)

.NET分布技术 篇1

1 分布式系统体系结构

计算机应用系统通常是体系结构和技术的结合,它们所具有的一个共同点是其分布式本质。分布式系统是一个动态的计算机集合,这些计算机由网络连接到一起,运行专门设计的软件,为用户提供集成式计算机环境。分布式系统的范围包括从支持商业处理的单用途应用程序,到服务于大范围用户并具有广泛资源的全方位服务的计算机设备。

早期客户机/服务器模型是是两层C/S体系结构,在此体系结构中,既可以方便,统一地对数据进行管理,又可以合理有效地利用现有的硬件资源,平衡系统的负荷。但是两层的C/S结构并不能适用所有的情况,因为某些业务不能依赖软件厂家直接提供的功能,而必须定制,这样的程序很难进行移植。因此建立一种新的工作方式,进一步分离客户层,使客户机上的所有处理过程不直接操作数据库管理系统,这样就可以把客户端的处理分为应用程序和业务逻辑处理。这种处理导致了三层的C/S结构的出现。客户层负责可视化界面,进行人机交互处理;中间层进行业务逻辑处理;而服务器层则负责数据的管理。采用三层C/S结构有下述优点:1)可以对任务进行合理分配。2)有利于提高系统的性能,使中间层的业务逻辑处理与数据层的业务数据紧密结合在一起,而无需考虑客户的具体位置。3)添加新的中间层服务器能够满足新增客户机的需求,可以大大提高三层系统的可伸缩性。4)在客户机的应用程序和数据层的数据库之间增加中间层,可以使客户机的应用程序独立于数据层的数据库。5)可以将业务逻辑集中到一起,有利于系统的实施。

在三层系统体系结构中,客户层和数据层都己被严格定义,而中间层未明确定义。因为中间层包括了所有与应用程序界面和持久数据存储无关的处理,我们可以把中间层划分为许多服务程序,将每一个服务程序都视为独立的层,这样原来的三层体系结构就变为N层体系结构。典型的N层结构就是基于Web的应用程序,如图1所示。

由于客户/服务器应用程序跨越了多台计算机,所以需要TCP/IP或者IPX网络协议来连接应用程序的各个节点。N层系统需要更复杂的设备来实现跨网络的通信。因为在客户应用程序和中间层服务之间不能象2层系统那样以一种通用的结构方式实现;相反,客户应用程序需要一种通信模型,以协调客户应用程序的不同开发平台。这种模型即为客户应用程序的中间件。最早被广泛认同的中间件技术是远程过程调用,使用远程过程调用,客户应用程序可以调用在远程计算机上执行的C语言函数。

从分布式应用系统的角度来看,一个网络项目最少分三层:外观层、事物逻辑层、数据服务层。多层结构比两层结构具有更大的灵活性。首先,三层可以运行在不同的机器上,如果应用是业务逻辑比较复杂,可以使用高配置的计算机来运行业务逻辑层;如果应用的数据量很大,就可以采用分布式的数据库来作为应用的数据存储结构。其次,只要层与层之间的接口保持不变,那么某一层的变化不会影响到其他层,当层与层之间是松散藕合时,可以简单地替换组件(或整个一层),以适应变化了的需求。

分布式构架的网络整合平台,主要有Microsoft整合的Windows与因特网的平台一Windows DNA与Sun公司提出的基于Java2平台,由一系列中间件服务组合起来的J2EE(Java2Enterprise Edition)体系结构。

Windows DNA的全名为Windows Distribute Internet Architecture,即Windows的分布式互联网体系结构,是微软整合了Active X,WWW技术(如VBScript,DHTML等)平台的总称。微软利用IIS以及WWW作为系统前端来处理用户互动界面,以COM架构作为中间层来处理企业程序,以SQL Server作为后端储存数据的服务器,以实现三层式(Three-tier)或更多层系统的开发环境。三层式系统开发的好处在于,系统的界面、系统内部的程序以及企业后端的储存数据库可以分开。再者,因为整个系统是整构在网络上的,因此用户端只需有个普通的IE浏览器就可以在任何地方存取到系统,以减少最为繁杂的用户管理工作。

SUN所引导发起的J2EE体系则是一种利用Java2平台来简化诸多与多级企业解决方案的开发、部署和管理相关的复杂问题的体系结构。它是由一系列中间件服务组合起来的体系,J2EE作为中间件,提供了强大的服务功能,使开发人员只需要关注商业逻辑,而不需要注意其他的细节,因而能够加快开发速度,提高系统的运行效率和稳定性。J2EE技术的基础是核心Java平台或Java2平台的标准版。J2EE具有如“编写一次,到处运行”的特性,方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全机制等等。

在Windows DNA之后,微软便开始将研究重心转到一个新的计划——NGWS(Next Generation Windows System,新一代的Windows系统)即微软所推出的.NET。Microsoft.NET是微软于2000年6月发布的下一代软件和服务战略,其目的是整合新的设备和技术,建立全新的网络协议和格式,协调众多的智能设备与网站,从而提供更简单,更为个性化,更有效的互联网服务。

2 NET的开发工具

.NET开发平台在开发人员用以创造应用程序的工具和技术上做了根本的变化。Visual Studio.NET就是微软公司为实现其.NET技术而开发的一整套工具组件,它提供了一个用于在该平台上创建应用程序的可视化集成开发环境(IDE)。集成开发环境是目前计算机语言产品都具备的一种工作环境,是进行程序设计的工作场所。在集成开发环境中,程序员可以对源程序进行编辑和编译,对目标程序进行调试运行。

2.1 Visual Studio.NET

2002年2月,微软发布了Visual Studio.NET(简称VS.NET)的最终版本,这是微软极力推荐的创建.NET应用程序的软件开发工具集。作为微软的下一代开发工具,它和.NET开发框架紧密结合,遵循.NET Framework,利用通用语言运行环境和公用层次类库提供加速开发过程的高效工具。VS.NET主要用于开发企业规模的Web应用程序以及高性能的桌面应用程序。

在开发网络应用程序时,以前开发人员只能在Web页中嵌入VB Script或J Script。现在,Web页可以用VS.NET中的任何一种语言来生成。IDE也提供了从Web表单控件中创造Web页的拖放式GUI(Graphical User Interface,图形用户界面),它是完全动态的,易于编码,能自动处理状态问题,根据浏览器兼容能力生成纯HTML,并且将用户界面问题和编码问题相分离。

在VS.NET环境中,所有控件的代码,包括格式化代码,都可以显示出来,这样便于高级开发者修改表单和控件的缺省行为,并且在应用程序的外观上给予它们更紧凑的控制。此外VS.NET还提供了完全集成的数据处理,尤其是XML和数据库集成,通过和数据源相连结合起来,大大简化了对来自不同种类的数据源的联合数据(例如将来自Oracle数据库的雇员数据合并到基于XML的销售成绩表中)的处理。使用.NET框架的开发工具,大大提高了开发者的效率,集成了多种语言支持;简化了服务器端的开发,提供了高效地创建和使用网络服务的方法,使开发人员能够快速构建和部署强健的、可靠的应用程序[1]。

2.2 C#

.NET开发框架支持多种语言,Visual C#.NET作为.NET Framework的主力开发语言,这是由C#的特点决定的[2,3,4]。

1)功能性和高效性。C#是Microsoft公司为推行.NET战略而发布的一种全新的编程语言,它的前身是C++语言。这种语言给开发人员提供了大量灵活的进行底层控制的能力,但这种灵活性是以开发的效率为代价的。比如指针操作引起的不安全因素,内存回收需要程序员介入等,使得用C++开发软件的困难程度比其他语言要高得多。由于与生俱来的复杂性和漫长的开发周期,开发人员都期望有新的、更好的开发语言,这种新的语言应能兼有功能灵活性和开发效率特点,融C++的强大和Visual Basic的简易于一体。

2)包容不断涌现的Web编程标准。在目前国际互联网应用日益广泛的情况下,越来越多的解决方案需要使用不断涌现的Web标准如超文本标识语言(HTML)、可扩展标识语言(XML)和简单对象访问协议(SOAP)等。现有的开发语言都是在Internet或者说是Web发展初期开发的,它们不可能提供适合于新的Web开发的技术支持。C#在保证了强大的功能和灵活性的同时,给C和C++带来了类似于VB的快速开发,并且它还针对.NET作了特别设计。C#可以快速的构建从底层系统级到高层商业组件,使用C#语言构建的这些组件,能够很容易的转换为Web Services,从而可响应来自Internet的与平台和开发语言无关的访问。XML是在Internet上传输结构化数据的标准方法,为了提高性能,C#允许XML数据直接映射为结构数据类型以代替类,这是一个处理少量数据的更高效的方法。这些特性结合起来使得C#成为优秀的下一代网络编程语言。

.NET为编写网络化仪器软件,提供服务器端脚本编写环境,使用它可以创建和运行动态交互的Web服务器应用程序,它能够把HTML、脚本、组件等有机地组合在一起,形成一个能够在服务器上运行的应用程序,创建以网页形式通过Internet发布的网络化仪器。在C#的Web编程中,可以用C#编写自己的服务器端组件,除了传统组件外,还包括那些具有特殊功能的可编程组件。使用它们可以更自由、更容易地进行数据绑定,具有强大的跨平台性。

3 结论

本文详细介绍网络化仪器的核心技术——.Net分布式技术,它基于分布式系统体系结构,采用.NET框架公共语言运行环境和.NET类库两个主要部件,并以Visual Studio.NET和C#为开发工具。

参考文献

[1]艾迪明.NET框架体系结构[J].计算机工程与应用,2003,(2).

[2]Adrian,等,著,王海峰,等,译,C#.NET Web开发指南[M].北京:机械工业出版社,2003.

[3]陆昆仑,等,著,用C#.NET开发网络服务[M].北京:希望电子出版社,2003.

[4]余安萍,等,著,C#.NET程序设计教程[M].北京:电子工业出版社,2002.

.NET分布技术 篇2

关键词:.NET框架,分布式,通信技术

智能客户端是.N ET平台下的新型部署方式, .N ET Remoting, Web service, En terprise service是.NET框架下连接智能客户端与后台服务端的主要消息通信技术[1]。智能客户端系统全面性能很大程度上受选取何种通信方式影响, 因此对.NET框架下分布式通信技术展开研究有着十分重要的现实与理论指导意义。

1 .NET框架概述

.NET框架是指用于构建、规划及运行XML Web服务和相关应用程序的编程模型, 能够使高度分布式Internet背景下应用程序开发得以简化[2]。

.NET框架包括统一类库、通用语言运行时2项主要组件。其中, 统一类库是一个综合性的可重用类型集合, 用户可通过对统一类库的使用开发出Web窗体、XML Web服务等一系列应用程序[3]。其涵盖的技术主要为ASP.NET、XML类、Windows Forms、企业服务以及Web Forms等。作为.NET框架的基础, 用户可把通用语言运行时视成一项在执行期间管理代码的代理, 其输出线程管理、内存管理及远程处理等核心服务, 同时强制运行严格的类型安全及保证可靠性、安全性的相关形式代码准确性。本质上而言, 代码管理的含义即为运行时的基本原则。

.NET框架可通过非托管组建承载, 此类组件把通用语言运行时加载至自身进程中同时开启托管代码执行, 进一步建立起一个能够一并对托管、非托管功能进行利用的软件环境。.NET框架一方面提供相应的运行库宿主, 一方面促进第三方运行库宿主开发。

2 .NET框架下分布式通信技术对比

在智能客户端应用系统开发过程中, 应当充分权衡系统安全性、表示层实现、部署维护及支持离线应用与否等方面内容, 不过最需要考虑的是怎么去达成前后台客户端、服务端相互的通信[4]。智能客户端应用系统中, 囊括了.NET Remoting, Web service, Enterprise service等典型通信技术。其中, .NET Remoting是一项相对于DCOM的技术, 建立了某一许可对象经由程序域与另一对象开展交互的结构, 与DCOM相互更加安全、便捷, 能够同时支持多种协议;Web service是一项能够跨平台的技术框架, 制定了建立跨系统、跨平台、跨语言等的分布式应用可行方案;Enterprise service是一项COM+服务基础框架访问技术, 大部分.NET特性集成至该项技术中, 一定程度使访问此类服务时得到了简化[5]。这3项技术均能够有效实现客户端与服务端的连接, 不过各项技术有着不同的关注点, 在此作下述对比。

2.1 .NET框架下分布式通信技术的性能对比

智能客户端系统整体性能很大程度上受通信性能影响。通过使.NET Remoting, Web service, Enterprise service选取同一手段, 逐一大数据量Data Set、小数据量Data Set及大数据量对象集合的通信时间展开比较 (见表1) 。

由表1可发现, 在大数据量Data Set、小数据量Data Set用例中, 3项技术的通信时间数据对比差异不显著, 这是由于即便.NET Remoting, Enterprise service选取的是更便捷传输的二进制机制, 然而在对Data Set进行传输期间, 仍旧要把Data Set序列化为xml, 因此, .NET Remoting, Enterprise service仅存在细微的优势。在大数据量对象集合用例中, 凭借集合形式返回与大数据量Data Set一致的数据结构, 全面处理时间明显减少, 同时.NET Remoting, Enterprise service相较于Web service存在显著的性能优势。经上述对比可知, 相较于选取哪一种通信方式, 经由对象集合返回数据结果对系统性能产生的影响明显更大, 且.NET Remoting, Enterprise service在处理时间方面明确要比Web service耗费时间少。

2.2 .NET框架下分布式通信技术的安全性

客户端与服务端通信期间, .NET web service存在内建安全机制。.NET Remoting不存在自身安全模式, 身份授权、验证均通过通道、主机进程开展既可对安全模式进行自定义并将其插入, 又可通过IIS开展。Enterprise service将DCOM作为幌子开展远程通信, 且DCOM具备十分强的安全性。

2.3 .NET框架下分布式通信技术的耦合性

智能客户端系统开发与部署的灵活性很大程度上受耦合性影响, 即伴随耦合性松散度的提升, 系统开发与部署便越来越简单。Web service相互耦合性较为松散, 连接中不论哪一方都能够对执行机制进行更改, 并不对应用程序有序运行构成影响。倘若单从部署层面而言, Web service为智能客户端系统最佳通信技术。.NET Remoting同样部署相对简单, 需要开展的工作仅为程序集部署、配置文件更改。然而, 一般情况下, .NET Remoting要经由专门端口开展二进制通信, 由此使得其与网络拓扑结构耦合性极其强。相较于前2项技术, Enterprise service耦合性略显不足, 但是经由松散耦合时间机制可使客户端与服务端组建紧耦合的特性得到一定程度缓解[6]。

3 基于.NET通信技术的生产商应用模型

通过对现阶段客户端及分布式通信技术的探讨, 制定了一类前端采用智能客户端, 后台基于不同类型业务逻辑服务组件的生产商应用模型。智能客户端能够使操作界面变得越来越智能化、人性化, 结合后端一系列通信技术可使操作流程变得越来越简化, 提升生产商决策反应速度, 强化生产商竞争水平。

3.1 生产商内部生产监测

在生产商内部, 生产工作是一项繁杂的系统工程, 不仅有着复杂的流程, 还要不同资源的配合, 且伴有严苛的实时性要求。与.NET Remoting、Web service相比, Enterprise service最主要的不同之处在于对事务的处理上。选取Enterprise service所看重的是其良好的分布式事务操作水平, 每一组件均为继承制Enterprise service、Systrm.Enterprise service组件客户端与服务端相关联, 结合生产商生产工作实质内容来对组件相应需求功能予以指定, 客户端经由服务端来传达对应配置的每一组件, 产生服务链, 进而使具体生产需求得到满足。

3.2 生产商内部生产指导

通常情况下, 生产商内部生产指导是对生产数据展开分析, 对不同部门相互生产状况予以协调。.NET Remoting, Web service均是适用的技术, 不过有着不一致的关注点。Web service有着相对广泛的通用性, 能够跨平台, 不过Web service在通信期间不断序列化会使得应用程序性能逐步下降。就生产商应用程序来说, 一旦传输量十分高时, 简单对象访问协议系统会出现开销过度情况, 要想达成尽可能快的生产指导解决方案, 于该级系统中, .NET Remoting显然更为适用。.NET Remoting建立了某一许可对象经由程序域与另一对象开展交互的结构。不管这2个对象处在一个进程与否, 均能够应用。就框架上来说, .NET Remoting独享十分适宜经由网络对资源进行访问, 而不需要应对基于简单对象访问协议的Web service面临的困难。

4 结语

总而言之, .NET Remoting, Web service, En terprise service是.NET框架下连接智能客户端与后台服务端的主要消息通信技术, 智能客户端系统全面性能很大程度上受选取何种通信方式影响。相关人员务必清楚认识.NET框架, 全面分析.NET框架下分布式通信技术的不同, 不断钻研研究, 总结经验, 积极促进.NET框架下分布式通信技术的有效应用。

参考文献

[1]任恩茂..NET框架下分布式通信技术的分析与研究[J].信息技术与信息化, 2006 (5) :46-47.

[2]钟涵, 李志蜀, 王汾雁, 等..NET Remoting和Web Service结合的分布式应用设计与实现[J].计算机应用, 2007 (Z1) :213-214.

[3]谭剑.运用.Net企业服务框架实现与非.Net平台的分布式系统开发[J].中国新技术新产品, 2010 (20) :25-26.

[4]张晓峰, 丁亦俊, 蔡圣佳.Windows平台下分布式技术比较综述[J].电子商务, 2012 (9) :66-67.

[5]金丽, 朱浩.基于可信对等的分布式入侵检测通信框架设计[J].计算机工程与设计, 2010 (5) :969-972.

.NET分布技术 篇3

随着传统的数据库、计算机网络和数字通信技术的快速发展,以数据分布存储和分布处理为主要特征的分布式数据库系统的研究和开发越来越受到人们的关注。微软提供了2种解决方案来为用户实现数据服务,即.NET Remoting和Web Service技术。众所周知,Web Service技术已经是业界公认的一种标准数据传输方案,它基于HTTP之上,可以轻松穿过防火墙。而Remoting技术则是在.NET环境下,在应用程序内部或应用程序域之间传输数据的方案,它有几种通道可以在数据传输中使用,选择适当的通道同样可以穿越防火墙。然而,在一个封闭的网络环境中,选择TCP通道将获得更好的连接性能。这种情况下,无疑.NET Remoting具有明显的优势。

开发分布式数据库系统需要解决的两个重要问题是:各场地间的数据通信以及对远程数据库的操作及管理。使用ADO.NET数据访问技术和.NET远程处理框架能够高效、可靠地解决这两方面的问题。

具体表现为通过使用.NET远程处理框架能够方便地解决数据、命令远程传递问题。ADO.NET中的Dataset对象可以访问断开方式的数据库,DataReader对象则能够快速有效的访问任何连接的关系型数据库。

2 远程处理过程

实现数据和命令的远程传递一般有以下三种方案:

1)报文或消息的方式

把要传送的数据转化为流格式。再通过套接字编程用报文的形式发送到远程主机,但此方法麻烦,不易实现。

2)Web Services技术

各远程主机提供数据库查询服务的Web Services,这种方式只能对单个场地进行查询,无法实现多场地的联合查询。

3).NET远程处理框架(.NET Remoting Framework)

它将远程过程调用RPC(Remote Procedure Call)的技术细节隐藏起来。服务程序只需通过简单的设置就可以把本地对象变成为远程提供服务的远程对象,客户端可以像访问本地对象一样透明地访问远程对象。所有的消息、报文等都交给.NET Remoting对象处理。大大简化了开发过程。.NET Remoting能够在任何类型的应用程序,包括Windows窗体、托管的Windows服务、控制台应用程序或ASP.NET辅助进程中灵活地托管远程对象。它提供两个传输通道TCP和HTTP。这两个通道都能使用套接字提供任意发送和接收进程之间的通信。远程处理的一般过程分以下四个步骤进行:

(1)服务器端创建一个服务器类的实例,客户端的远程处理系统创建一个表示该类的代理对象。并向客户端对象返回一个对该代理的引用;

(2)当客户端调用方法时,远程处理基础结构连接检查类型信息,侦听信道获得该请求并将其转发给服务器远程处理系统,服务器远程处理系统查找必要时创建并调用被请求的对象;

(3)服务器远程处理系统将响应捆绑成消息并通过信道发到客户端的远程处理系统;

(4)客户端远程处理系统通过代理将调用的结果返回给客户端对象。

发布远程对象时,首先要设置一个网络端口号,然后创建并注册一个通道,最后发布该服务器端的激活对象[1]。其它场地的服务器根据IP地址和网络端口号即可方便地获取所发布的远程对象。

实现远程对象发布和获取的主要C#代码如下:

3 数据访问技术

ADO.NET数据访问技术包括对断开连接的数据的内部支持、全面的XML支持以及与整个.NET框架的无缝整合。ADO.NET利用DataReader对象能够快速有效的访问任何连接的关系型数据库。而通过Dataset对象则可以访问断开方式的数据库[2]。由于数据库资源极其宝贵。当不再需要DataReader时,要及时关闭与数据库的连接。DataReader方法最大的优点是高效且简便。但缺点是必须要以打开连接式的方式访问数据库。对于分布式的应用程序,经常需要以断开连接式的方式操作数据,这就需要用到Dataset对象。

Dataset对象提供了丰富的、高自动化的和功能强大的工具,用于存储、操作和远程传输数据。Dataset是保存在内存中的断开连接的数据副本。它使用离线数据结构,数据源中的数据被缓存到数据集即Dataset对象中[3]。数据以XML格式保存,Dataset对象由DataAdapter对象填充。DataAdapter对象又与基础Command和Connection对象进行交互。Dataset和DataAdapter对象还提供了更新数据的机制。

DataAdapter不仅包含检索数据的Command对象,还包含插人、更新和删除数据的Command对象。只需将已更改的Dataset对象传递到DataAdapter,DataAdapter将自动调用相应的Command对象将更改更新到数据库中[4]。进行更新之前将检查基础数据,如果用户更改了数据,则不会应用更新,并将通知代码发生了冲突,从而保证了数据的一致性。

分布式应用程序以其高度的可扩展性和可伸缩性,同时由于资源共享提高了系统的性价比,已经得到广泛的研究和应用,各种分布式计算对象和平台也得到了延伸和拓展。.NET Remoting是.NET框架提供的一项强大的技术,利用它可以使位于任何位置的应用程序互相通信,这些应用程序可能运行在同一台计算机上,或者局域网内的不同计算机上,也可能位于相隔万里的有巨大差异的网络中。

4 结束语

总之,利用.NET Remoting技术能够方便地解决各场地间数据的通信问题,ADO.NET数据访问技术可使得对数据库的远程操作及管理变得更加高效、可靠。在这两种技术的基础上配合C#编程工具,能有效地实现对分布式数据库查询、更新以及管理等操作。并且可提高系统的可靠性和安全性。

参考文献

[1]林宫.基于Web Service的多层分布式科研信息系统研究[J].福州大学学报[自然科学版],2005,[4].

[2]潘群华,吴秋云,陈宏盛.分布式数据库系统中数据一致性维护方法[J].计算机工程,2002,[9].

[3]陈廷斌,吴伟.基于Web Services的跨企业分布式工作流管理[J].计算机工程,2004,[16].

.NET分布技术 篇4

关键词:事务,分布式事务处理

事务是执行一连串工作的逻辑单元, 事务中的所有工作项目完成, 才算是一个完整的事务, 假设事务中有1000项工作, 其中的999项完成, 只有一项没有完成都算事务失败。事务中的各项工作组成了一个整体, 事务完成后全部的数据必须保持稳定的一致性状态, 事务完成后数据必须正确无误。事务处理最为典型的实例是银行处理两个账户间的转账业务。假设需要从A账户转账10000元到B账户。我们需要做的是将A账户减去10000元, 同时需要在B账户加10000元。这两步工作就需要在一个事务中完成。才能保证转账的成功或者失败, 以有效的避免只减不加与只加不减错误发生。事务处理最早是在数据库系统中应用的, 在一个数据库中数据库系统提供了事务处理, 为正确的进行数据业务处理提供了可能。然而随着应用需求的扩大。业务处理常常需要对存放在不同数据库中的数据进行事务化处理, 也就是需要进行分布式事务处理。为了适应需求, 微软.NET开发工具在不断的改进与提高事务处理技术, 以适应新的需求。.net在2008版与2003版就有明显的改进。在.NET 2008中事务处理更加简单易用。

1 分布式事务处理

在应用开发中常需要对存放在同一个物理服务器中不同数据库的数据进行事务化处理, 或者是需要对分布在不同地域的多台数据库中的数据进行事务化处理, 以上两种功能情况都需要进行分布式事务处理, 其中的数据库系统可能结构不同, 如一个应用sql server库, 另一个应用oracle数据库。假如我们需要在两家银行间进行转账业务, 两家银行应用的数据库服务器不同, 进行转账业务就需要分布式事务处理, 以保证两个银行账户间的收支平衡。不发生错误的业务处理。同样应用需求还很多, 其共同的特点是需要在保证多台服务间的数据能够同时正确修改, 或者不做修改。保护数据的完整性。分布式事务处理就是专门解决这类问题的技术系列。

1.1 ADO.NET事务处理的演变

传统的.net事务处理分显式事务与Enterprise Services声明式两种。显式事务具有速度快消耗资源少等特点, 但是其功能简单, 只能管理单一对象和单一持久资源间的事务, 只能应付单一Sql Connection对单一Sql Server间的事务 (或oracle及其他数据库) , 也就是说只能处理所有数据在一个物理数据库中存放的应用系统开发, 不能处理具有多个Sql Connection对多个Sql Server间的分布事务。Enterprise Services的声明式事务通过COM+形式来提供事务服务, 并且需要调用分布式事务协调处理器MSTDC (Microsoft Distributed Trannsaction Coord) inator) 来协调分布事务, 其事务功能强大, 但是需要昂贵的成本代价, 同时事务执行速度慢。为了克服传统事务处理在应用中的局限, 微软在.NET 2008中推出了新的事务处理机制, 当然在类的命名空间上还是沿用了.NET 2003的System.Transactions, 其构成如图2, 系统提供了隐式事务处理程序编写模型与显式事务处理编程模型两种实现方案。处理分布式事务还用到了MSDTC。

1.2 隐式事务处理编程模型

应用时只需要定义Transaction Scope, 其中的各种语句将自动的被.NET编译在一个事务中完成。同时在事务处理中不需要象传统事务处理进行Commit与Rollback操作。Transaction Scope对象可以自动确保事务执行或回退。银行转账业务实现如下

隐式事务处理具备了处理分布事务的能力, 同时应用较为简单。不过在应用需要注意的是在数据库连接字符串中加入Enlist=true, 保证数据库连接添加到Transaction Scope的作用范围中, 否则事务不能正常提交。

另一种显式事务处理程序编写模型Committable Transaction对象, 其编程模型如下:

显式事务处理的特点是sqlconnection对象必须用Enlist Transaction方法加入到事务中, 否则事务不能正常的发挥作用。在显式事务处理中还需要进行事务提交与事务回退操作。无论是隐式事务还是显式事务处理, 系统都首先按Local Transaction来处理, 当Local Transaction无法应付事务需求时系统自动的将事务处理升级为分不布式事务处理, 并有MSDTC来负责事务的协调。

2 MSDTC的配置方法

.NET 2008更新了事务处理机制, 当事务升级到分布式事务时, 系统就用到MSDTC, MSDTC是微软操作系统间保持事务同步的技术, MSDTC的安装配置步骤如下:

1) 检查操作系统是否安装DTC组件。XP默认安装, Win2003默认不安装。安装步骤如下:

a.“开始”|“控制面板”|“添加/删除程序”|“添加/删除Windows组件”, 选择“应用程序服务器”, 单击“详细信息”, 选择“启用网络DTC访问”, 单击“确定”|“下一步”|“完成”。

如图3:

b.停止并重启MSDTC服务 (命令:net stop msdtc和net start msdtc) 。

c.停止参与分布式事务的任何资源管理器服务。如Microsoft SQL Server或Microsoft Message Queue Server然后重新予以启动。

2) 设置MSDTC组件。

a.“开始”|“运行”, 输入“dcomcnfg”, 或者“控制面板”|“管理工具”|“组件服务”, 打开“组件服务”窗口,

如图4。

b.“组件服务”|“计算机”|“我的电脑”, 右键“属性”|“MSDTC”。

勾选“使用本地协调器”, 单击“安全性配置”, 弹出“安全配置”窗口, 勾选“网络DTC访问”、“允许远程客户端”、“允许远程管理”、“允许入站”、“允许出站”、“不要求进行验证”、“启用事务Inernet协议 (TIP) 事务”和“启用XA事务”, “允许入站”和“允许出站”。服务器端机器必须“允许入站”。客户端机器必须“允许出站”, DTC登陆账号必须是“NT AUTHORITY"Network Service”。

如图5:服务器端机器。

如图6:客户端机器。

3) 配置防火墙以允许与Msdtc.exe服务的网络通讯, 将防火墙安全等级设为中级即可。

4) 检查两台机器能够相互ping通Hostname。

Hostname是机器名, 而不是IP。

若不可以, 进行如下设置:

用文本编辑器修改系统的hosts文件, 不同版本的windows的hosts文件的存放目录不同, (windows2003存放在C:WIN-DOWSsystem32driversetc目录下) , 在hosts中加入写上IP和Host Name, 如“192.168.1.116 lenovo07-884gb6.”, 保存hosts。

5) 启动SQL Server的分布式远程连接。

(1) SQL Server 2000:

(1) “开始”|“所有程序”|“Microsoft SQL Server”|“企业管理器”, 鼠标选中SQL Server实例。

例如:SPRING-UKC6DDAM, 右键“属性”, 弹出“SQL Server属性 (配置) ”窗口, “连接”|“远程服务器连接”, 选中“允许其他SQL Server使用RPC远程连接到本SQL Server”和“强制分布式事务处理 (MTS) ”, 点击确定。

如图:

参考文献

[1][美]David Sceppa.ADO.NET技术内幕[M].粱超, 张莉, 贺堃, 译.北京:清华大学出版社, 2003.

[2]Microsoft Visual Studio 2003 Online help.

[3]Microsoft Visual Studio 2008 Online help.

.NET分布技术 篇5

随着现代社会信息量的急剧增长,各种以Internet为载体的电子信息愈来愈多,如何有效、快速、准确地在海量信息中查找所需要的信息,已经成为人们的重要需求。全文检索是一种非常有效的信息检索技术,它使人们可以在各种文本中搜索包含指定关键字的文本。全文检索极大地提高了从海量数据中检索或查找特定信息的速度和效率。

全文检索经历了单机、C/S结构到B/S结构的发展历程。随着Internet的飞速发展,基于B/S结构的全文检索技术正得到日益广泛的应用。相对C/S结构来说,B/S具有瘦客户机、易于升级与管理、具有较高的鲁棒性能等特点,但是很难实现复杂的业务和满足文本处理、分析等需求。

本文基于Lucene.NET和.NET Remoting 研究并实现了一种面向海量文本数据的分布式全文检索系统,把Lucene.NET的索引和检索功能封装为.NET Remoting对象,使用.NET Remoting对分布的远程对象进行集成,实现分布式的全文索引与检索。实验说明本系统实现了海量文本的快速索引和检索,适合于门户网站及部门间等的海量文本资源的检索。通过扩展,系统可以适应C/S和B/S这两种应用需求。

1 Lucene.Net全文检索引擎

Lucene.Net是基于Apache基金会jakarta的项目Lucene的二次开发,目的是能够在.Net环境下应用Lucene的强大的全文索引和检索功能。它提供了简单的函数接口,可以方便地嵌入到各种应用中实现全文索引与检索功能。

1.1 Lucene.Net的组成

图1为Lucene.Net组成结构图。

Lucene.Net.Index 模块 主要实现索引文件的读写接口,通过该模块可以实现索引文件的创建和添加、删除以及读写等。

Lucene.Net.Search模块 主要提供了检索接口。通过该模块可以输入检索条件,得到查询结果集,与Lucene.Net.QueryParser配合还可以支持查询条件间的与、或、非、属于等复合查询。

Lucene.Net.Analysis 模块 主要用于分词。分词的工作由Analyzer 的扩展类来实现,由于Lucene.Net自带的 StandardAnalyzer类的分词算法比较简单,只实现了简单的二元分词,其效果较差,我们需要实现自己的中文词法分析器。

Lucene.Net.Document 模块 封装了对文档对象的定义,是对所有文档的抽象。

Lucene.Net.QueryParser查询分析器 提供检索接口,把用户的输入转化为query对象以便查询。

1.2 Lucene.Net的优点

Lucene.Net由于其优秀的性能在各个领域都得到了广泛的应用[5]。除了高效快速,Lucene.Net还具有以下突出的优点[4]:

(1) 索引文件格式独立于应用平台,Lucene.Net 定义了一套以8位字节为基础的索引文件格式,使得不同平台的应用能够共享建立的索引文件。

(2) 增量索引和批量索引,Lucene.Net可以进行增量的索引,对于大量数据进行批量索引,并且提供了用于优化批量索引和小批量的增量索引的接口。

(3) Lucene.Net并没有指定数据源的格式,而是提供了一个通用的结构(Document对象)来接受文件的输入,因此输入的数据源可以是: 数据库、Word文档、PDF文档、HTML文档。

(4) Lucene.Net支持多个字段的索引,通过控制要索引的域,可以索引文档的任何属性,包括日期、作者、摘要等,并且可以选择是否对某个字段进行词法分析,即分词[1]。

2 .NET Remoting 框架

.NET Remoting 是一个丰富的、可扩展的框架,它使得处于不同AppDomain、不同进程和不同机器上的对象可以实现无缝通信。它可用于网络上不同计算机的基于CLR的不同应用程序之间的通信,也可用于在相同计算机上基于CLR的不同应用之间的通信。因为可能使用不同的传输协议(例如SOAP和TCP),应用程序可以使用二进制编码,也可以使用XML文件,因此这是一个非常灵活的架构。其框架如图2所示。

.NET Remoting中通过通道(Channel)来实现两个应用程序域之间的对象通信。首先,客户端通过通道访问服务器端对象,以获得服务端对象的代理。服务器端对象也就是通常所说的远程对象。对于客户程序来说,代理提供了与远程对象完全一样的方法和属性。当代理的方法调用时,就会创建消息,然后将这些消息串行化并发送到客户通道中。通过代理,客户端应用程序就可以如同使用本地对象一样来操作远程对象。.Net Remoting包括的核心元素有[5,8]:

应用程序域 应用程序域是.NET运行库的逻辑进程表示,任何实际的操作系统进程可以包含多个应用程序域。

通道 用以实现应用程序域之间的通信,.NET Remoting通过通道穿越.NET Remoting边界传输序列化的消息对象。.NET Remoting基础设施提供了两种类型的通道,可以用于为分布式应用程序提供传输机制:支持TCP协议的TCPChannel 和支持HTTP协议的HTTPChannel。

远程对象 是指从MarshalByRefobject类派生,且运行于调用方应用程序域之外的对象。在构建多层分布式应用程序时,该对象用于实现业务逻辑层。

代理对象 作为远程对象的代表,代理对象确保对代理进行的所有调用都能够转发到正确的远程对象实例,并将结果返回到客户端。客户端通过调用代理对象实现对远程对象的访问。

3 系统设计与实现

分布式全文检索系统包括分布式索引、分布式检索和负载均衡几个部分,本文开发的系统需要对各种文档、资料进行全文检索,所以文档必须同时考虑在文件服务器和数据库里存储,这样使系统具有高度的扩展性,充分发挥软硬件的性能,实现快速索引和检索。系统利用Lucene.Net优秀的索引和检索性能实现检索和索引的远程对象,即把检索和索引功能实现为.NET Remoting远程对象,远程对象分布在各个索引引擎和检索服务器上,系统通过.NET Remoting对各远程对象进行调度和集成。

系统结构如图 3所示,系统包括三个服务。

3.1 全文索引服务

全文索引服务对数据库和文件服务器里的文档进行索引,建立索引文件,主要包括:

数据库网关 数据库网关定时从数据库里把存储的各类文档检索出来,提交给全文索引引擎,其中包括文档的各种属性信息。全文索引引擎对各种文档建立索引。

文件加载进程 文件加载进程定时从文件服务器的目录加载新的文档,提交给全文索引引擎。

索引作业调度进程 索引作业调度进程对数据库网关和文件加载进程提交的索引作业进行调度,它保存当前各个索引引擎的负载信息,把索引作业分配给当前任务最少的索引引擎,有效利用各个索引节点的硬件性能。

全文索引引擎 如图4所示,引擎是分布在各个索引服务器上的远程对象,负责对提交的各类文档建立索引。引擎采用Lucene.Net实现,引擎对文档及其各种属性信息建立索引。引擎由索引作业调度进程调度,该进程拥有索引引擎的远程代理,可以动态地调用服务器上的远程索引对象对文档进行索引。

3.2 全文检索服务

全文检索服务接收客户端的检索请求,检索各个索引节点的索引文件,合并检索结果并对结果进行排序。如图5所示,全文检索服务是分布在各检索服务器上的.NET Remoting远程对象,当用户发送检索请求时,负载均衡进程选择负载最轻的服务器,获取其上的远程检索对象进行检索,该远程对象检索各个索引节点,把检索结果返回给用户。

这里涉及一个检索的并行性问题,有以下两种选择:

(1) 把检索请求分发给各检索服务器让每个服务器分别在一个或者几个索引节点检索,再将检索结果进行合并。

(2) 把检索请求分发给负载最轻的检索服务器,让其在每个索引节点检索然后把结果返回给用户。

第一种方案对单个检索请求的检索速度比较快,但第二个方案对于大量并发检索请求的检索速度比第一个快。如果主要要求单个检索的速度,可以选择第一种方案,在所开发的系统中,由于要考虑大量并发的检索请求,在该系统中主要采用第二种方案。

3.3 负载均衡服务

负载均衡服务负责对检索进行调度,它保存当前系统的负载信息,自动把检索请求分配给负载最轻的全文检索服务器。负载均衡服务拥有这些信息:当前可用服务器队列,各服务器平均检索速度,各服务器最近一次执行任务的时间。

本系统基于这样的均衡策略:

(1) 接收检索请求,从当前可用服务器队列中找到空闲时间最长的服务器。

(2) 从(1)中得到的服务器中选择平均检索速度最快的服务器,若平均检索速度一样,则随机选择其中一台服务器。

(3) 从(2)中选择的服务器上获取远程检索对象,发送检索请求。

(4) 修改所选服务器的最近一次执行任务的时间。

3.4 系统运行流程

系统由两个相对独立的流程组成:

索引流程 数据库网关和文件加载进程从数据库或者文件服务器加载没有建立索引的文件,提交给作业调度进程,作业调度进程选择一台或者多台索引服务器,获取该服务器上的远程对象,把文件提交给远程对象,由远程对象对其进行索引。其中作业调度进程一直在后台运行,一旦有索引任务提交立即对任务进行分发。

检索流程 首先用户通过客户端提交检索请求,负载均衡服务获取请求,根据各检索服务器的负载情况和检索速度选择合适的服务器,获取该服务器上的远程对象,把检索请求提交给远程对象,由远程对象根据请求检索索引文件返回检索结果。

4 实验结果

系统采用开放源代码的中科院ICTCLAS分词组件作为Lucene.Net的词法分析器,并对ICTCLAS进行了部分优化。部署环境为四台IBM X3500服务器,其中两台作为检索服务器,另外两台作为索引服务器,为实验系统的性能以三台PC机模拟检索客户端,PC机上分别运行数量不定的检索线程,通过统计检索的平均时间来衡量系统对并发访问的响应速度。

测试数据是笔者搜集的大量纯文本文件,针对不同文本量进行索引,结果如图6所示。

由实验得到系统平均索引速度约为2.078G/min,并且索引所耗时间几乎呈线性增长,文本量的增加没有对索引速度造成影响。

为测试检索速度,系统使用约50G文本的索引文件对不同数量的并发客户端进行测试,结果如图7所示。

限于PC机的性能,PC机上所运行的检索线程不能太多,但系统对5000个客户端的平均反应时间小于10毫秒,这样的速度已经满足快速检索的需求。

实验结果说明系统具有良好的索引和检索性能,满足快速索引和检索的需求。系统把分布在不同地方和网络的软硬件资源集成起来,实现了计算的并行与分布性,提高了索引和检索的速度。

5 结 论

本文基于Lucene.Net和.NET Remoting设计并开发了一个分布式的全文检索系统,创新性地把.NET Remoting应用于全文检索,实现了一个高效快速的全文检索系统。系统具有高效快速、分布式的特点;系统充分利用了软硬件资源,实现快速的索引和检索。存在的问题在于系统未对检索的算法进行优化,使系统在查全率和查准率上相对一般基于Lucene.Net的全文检索系统没有明显提高。

该系统在军队某部信息管理系统中得到了很好的应用,同时该系统也为海量文本检索提供了一个良好的解决方案。

参考文献

[1]张校乾,金玉玲,侯丽波.一种基于Lucene检索引擎的全文数据库的研究与实现[J].现代图书情报技术,2005(2):40-41.

[2]张英武,杜凯,杨树强,等.分式海量文本检索系统研究[J].微电子学与计算,2006(23):20-22.

[3]蔡建超,郭一平,王亮.基于Lucene.Net校园网搜索引擎的设计与实现[J].计算机技术与发展,2006(11):73-74.

[4]赵汀,孟祥武.基于Lucene.Net的中文全文数据库设计与实现[J].计算机工程与应用,2003(20):179-181.

[5]马俊,杨开英,彭玉卓,等.NET Remoting与分布式计算[J].计算机技术与发展,2007(2):118-120.

[6]马保国,王文丰,侯存军,等.基于.NET Remoting的分布式系统实现[J].计算机技术与发展,2006(3):50-52.

[7]林碧英,赵锐,陈良臣.基于Lucene的全文检索引擎研究与应用[J].计算机技术与发展,2007(5):184-187.

.NET分布技术 篇6

1 定义解决方案

校园信息系统由4个子系统和2个服务组件。4个子系统分别为人事考勤管理系统,学生管理系统,后勤物资管理系统,财务管理系统。2个服务组件由windows service和web service组成。如图1所示。

四个子系统中的采用了数据相对独立原则,使用了SQL SERVER数据库和ORACLE数据库存取数据。共享数据通过web service向外发布,目的能使用数据保持最新状态;windows service主要任务处理日常工作中的上传各种文件,如:请假销假、各种报表、数据汇总等等,用WIN-DOWS文件系统事件来确保无论文件何时到达都会通知系统,这相当于用一个简单可靠的途径来完成类似队列的操作。采用轮询数据库或手工浏览目录会导致系统负担。

2 定义数据层

在人事考勤管理系统,学生管理系统,后勤物资管理系统,财务管理系统四个子系统中,需要根据自身的业务设计数据库和数据表,存储业务需要的数据。在设计数据表时,需要额外注意要与上传文件的相匹配,如果上传的是EXECL报表,需要从报表中抽取出重要的信息,存入数据表中去。在设计数据库时,要注重使用视图、索引和存储过程,提高数据的存取速度。

3 定义windows service

windows service的主要任务是扫描Execl和Word文档,从中抽取数据存入数据表中去,因为windows service始终是连续运行。当一个新的Execl文件出现在指定目录下时,它被触发,将数据转换到数据库中并将文件移到新目录下。为了使用这个任务能自动执行,可以使用System.IO命名空间中的File System Watcher类。这个类有一个用途:当文件系统发生某一改变时由操作系统发送通知到程序。这使得不需要采用资源轮询的方法来响应如创建、删除或修改一个文件操作。为了使用File System Watcher类,需要执行3个简单的步骤:

1)设置path属性,指出要监听的目录(如:D:ExeclFile.xls)。

2)设置Filter属性,指出要监听的文件类型(如:*.xls)。

3)设置要监听变化,设置NotifyFilter属性,指出需要监听的变化类型。

FileSystemWatcher类有4种事件:Changed、Created、Deleted、Renamed。其中,Created、Deleted、Renamed比较容易处理。难点是处理Changed事件,需要使用NotifyFilter属性来指出你所查找的变化类型(如,文件大小改变或文件名称改变)。否则,程序将被不停的一系统文件修改信息淹没。如果监听变化,还需要设置InternalBufferSize属性来确保快速连续发生变化的数据不会丢失。另外,由于windows service难以调试,程序产生异常不会抛出消息,要将此消息写入windows系统事件日志中去,便于对系统进行维护。

4 定义web service

web service的主要功能是四个子系统中横向交流数据通过web服务的接口向外界发布,所以对安全性要求比较高,采用了表单验证。表单需要配置web.config文件,其代码如下:

向外发布的web服务接口C#代码如下:

5 监视日志

不论对系统的设计、组件的分离、体系结构的简化做得多好,分布式应用程序始终是个复杂的系统。当分布式应用程序运行失败时,很难追踪到问题的原因或者组件发生错误的地方。这个问题对任何大型系统都存在,但是对于分布式系统中的组件分布到多台计算机、站点和不同的地理位置时,它就显得特别重要。要解决这个问题,需要创建可靠的日志记录底层结构。通常有四种方法:windows事件日志、直接写入数据库、消息队列、邮件;可以采用消息队列,消息队列能够解决离线操作。使用消息队列分三步:创建消息队列、查找消息队列、发送消息队列。其C#代码如下:

摘要:该文阐述了校园分布信息系统的设计思想,提供了一种系统组件设计框架,并以校园信息化系统为例,说明分布式系统的可复制的设计模式。

关键词:NET平台,分布式程序,校园信息系统

参考文献

[1]Nagel C.C#高级编程[M].6版.李铭,译.北京:清华大学出版社,2008.

.NET分布技术 篇7

关键词:OPC数据采集,Web Service.NET,Python OpenOPC

1 基于Python+.NET的OPC分布式数据采集及Web发布应用概述

在工业生产中,实时生产数据监测对于生产控制、安全检测非常重要。为了实现对实时生产数据的有效监测,需要通过对过程控制中的OPC数据进行采集。数据采集的方式虽然多种多样,但从传输速度和可靠性考虑,基于Python+.NET的()PC数据采集及Web发布方式更适合在选煤厂的生产中应用。这种技术是一种集多种技术为一体的自有技术,从设计方法的形成到选煤厂中的成熟应用,通过多次实践和改进,目前已在自动化生产中广泛应用。

2 设计与实现方法

2.1 设计方法

基于Python+.NET的OPC分布式数据采集及Web发布方式的设计方法主要是将Python语言及接口组件、Web Service技术、.NET开发及AJAX技术进行整合,实现了从后台的数据传输到前台的数据展现过程。

后台的数据采集及传输主要是通过一种简单实用的Python语言,Python是一种开源的解释型语言,方便移植与调试,且具有丰富的标准库。Python通过OpenOPC将采集到的数据传输到Web服务器,使用Web Service技术实现数据的接收。Web Service是一种用于实现分布式互操作的Web应用程序,可以使用这种技术将采集到的数据发送到远程服务器。Web Service将接收到的数据通过.NET网站发布到前台,并使用AJAX异步刷新数据,方便用户能及时看到工业生产的状态,以便监测生产过程控制中的问题,并尽快地进行处理解决。

这种设计方法的优点在于简化了数据采集的步骤,提高了数据采集的效率,使用前沿的技术进行数据发布,瘦客户端的访问方式方便了用户的使用,并且实现简单可靠。

2.2 实现方法

2.2.1 使用Python结合OpenOPC进行数据读取

首先在OPC主机上安装Python和OpenOPC组件。编写数据采集脚本。Python代码:

至此已经可以读取出OPC服务器中标签名为“TestTank”的数据值了,下一步是将采集到的数据传输到远程服务器。

2.2.2 分布式数据传输

使用Web Service作为数据接收程序,服务程序使用C#编写。在Web服务页面中定义了一个方法,包含2个参数:tag(标签名)和value(double类型的值),方法中将得到的值以及接收的时间存储SQL SERVER中,以备查询显示。C#代码:

我们使用suds web services client进行Python的Web Service交互,它是一种轻量级的基于soap的Web服务客户端实现。现在我们把刚刚读取到的value通过调用远程Web服务的方式传输给服务器。Python代码:

Web服务接收到之后将数据存储到SQL SERVER中。

2.2.3 数据展示页面

数据展示页面使用ASP.NET页面实现,并且使用AJAX技术实现数据后台异步刷新,使程序更友善易用。Html页面中绘制了一个液罐背景的区域,液位数字显示在这个区域中。

编写一个一般处理程序以供AJAX请求,返回TestTank的数据。C#代码:

编写执行AJAX请求的JS脚本,每隔5 s向一般处理程序请求一次数据,并将请求到的数据显示到页面上。

页面显示演示如图1所示。

3 应用效果

基于Python+.NET的OPC分布式数据采集及Web发布方法已在选煤厂中进行了应用,根据长期的观察和监视,数据采集速度较快,数据准确率有保证,提高了工业生产中的生产控制效率,减轻了工作人员的负荷强度。对于管理者来说,使用Web方式监视实时的生产数据和设备状况,能更好地掌握选煤厂的生产运转情况,更及时地发现可能存在的生产问题和安全隐患,以便进行快速的处理,从而保证生产的正常进行和设备的安全运行,得到了使用者的肯定。

参考文献

[1]翟红艺.基于Python的网络数据采集系统研究与设计[J].科技创新导报,2011(1)

[2]徐常凯,王耀才.基于Web的选煤厂生产现场数据采集技术研究[J].选煤技术,2003(1)

上一篇:《准则》和《条例》下一篇:经营性基础设施