|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。散布式|数据|数据库 择要.NETRemoting作为DCOM的替换,失掉了日益普遍的使用。本文中经由过程一个散布式数据库查询体系的办理计划,切磋了Remoting手艺的使用,同时也申明了利用该手艺能够十分便利地构建散布式使用程序。
关头字Remoting,使用程序域,远程工具,散布式数据库,ADO.NET
弁言
跟着传统的数据库、盘算机收集和数字通讯手艺的疾速开展,以数据散布存储和散布处置为次要特性的散布式数据库体系的研讨和开辟愈来愈遭到人们的存眷。微软供应了两种办理计划来为用户完成数据服务,即.NETRemoting和WebService手艺。尽人皆知,WebService手艺已是业界中一种公认的尺度数据传输计划,它基于HTTP之上,能够轻松穿过防火墙;而Remoting手艺则是在.NET情况下,在使用程序外部或使用程序域之间传输数据的计划,它有几种通道能够在数据传输中利用,选择得当的通道一样能够到达穿越防火墙。但是,在一个关闭的收集情况中,选择TCP通道将取得更好的毗连功能,这类情形下,无疑.NETRemoting具有分明的上风。
Remoting框架简介
.NETRemoting供应了一种同意工具经由过程使用程序域与另外一工具举行交互的框架。这类框架供应了多种服务,包含激活和保存期撑持,和卖力与远程使用程序举行动静传输的通信通道。并且,.NETRemoting是一个内容丰厚的、可扩大的框架,它使得散布在分歧使用程序域(AppDomain)、分歧历程和分歧盘算机上的工具能够完成无缝通讯。它供应的编程模子和运转时撑持,功效壮大且十分便利,可以完成通明的交互。
了解Remoting框架
1、基础道理
.NETRemoting系统布局图
.NETRemoting中经由过程通道(channel)来完成两个使用程序域之间的工具通讯。Remoting的通道次要有两种:Tcp和Http。在.NET中,System.Runtime.Remoting.Channel中界说了IChannel接口。IChannel接口包含了TcpChannel通道范例和Http通道范例。它们分离对应Remoting通道的这两品种型。通道工具代表了到远程使用程序的毗连。每一个通道工具还包括格局化程序工具,将办法挪用转换为已知格局的动静。
其基础道理如所示,起首,客户端经由过程通道会见服务器端工具,以取得服务器端工具的代办署理。服务器端工具也即一般所说的远程工具,利用时是经由过程跨使用程序界限传送工具援用取得该远程工具的代办署理。关于客户程序来讲,代办署理供应了与远程工具完整一样的办法和属性。今世理的办法别挪用时,就会创立动静,经由过程利用格局化程序类,将这些动静串行化并发送到客户通道中。客户通道和服务器通道举行通讯,以经由过程收集传输动静。服务器通道则利用格局化程序并行化动静,从而将办法发送给远程工具。经由过程代办署理,客户端使用程序就能够像利用当地工具一样来操纵远程工具。
2、使用程序域
Windows操纵体系将使用程序分别为独自的历程,构成使用程序代码及其数据的回护界限。固然历程在断绝使用程序方面是无效的,但一样出缺点:起首,历程属于初级的操纵体系布局,办理历程要触及良多操纵体系举动;其次创立和办理历程是一项十分高贵的义务,假如不接纳历程间通讯(InterprocessCommunication,IPC)机制,在一个历程中实行的代码就不克不及会见另外一历程,而接纳IPC机制的分外开支常常使得最初得失相当。在良多情形下,我们必要一个工具跨过使用程序域,与另外一工具举行交互。.NET所引进的使用程序域对上述成绩举行了很好的办理。使用程序域是.NET运转库的逻辑历程暗示,任何实践的操纵体系历程能够包括多个使用程序域。使用程序域具有以下长处:
●埋没了历程详细的操纵体系信息。
●使用程序域一样供应了断绝,一切.NET工具都界定在创立它的使用程序域中。
●关于不必要高贵的IPC机制的历程,使用程序域同意.NET运转库优化运转于个中的使用程序间的通讯。
3、远程工具的激活体例
远程工具派生自System.marshalByRefObject类,会见远程范例的一个工具实例之前,必需经由过程一个名为Activation的历程举行创立并初始化。这类客户端经由过程通道来创立远程工具的举动称为远程工具的激活。在Remoting中,远程工具的激活分为两年夜类:
●服务器端激活:又称为WellKnown体例,经由过程这类体例激活的工具称为服务器端激活工具大概出名工具。这是由于服务器端使用程序在激活工具实例之前会经由过程一个尽人皆知的一致资本标识符(URI)来公布这个范例。.NetRemoting把服务器端激活又分为Singleton形式和SingleCall形式两种。Singleton形式即指运转库只创立一个工具承受一切的客户端哀求,并经由过程租赁战略把持其保存期;而在SingleCall形式中,运转库将为每一个客户端哀求创建一个新工具,并在完成哀求后开释这个工具,由渣滓搜集器(GC)举行烧毁。
●客户端激活:在这类形式下,一旦服务器端取得客户真个哀求,将为每个客户端都创建一个实例援用。固然这类形式与服务器端激活的SingleCall形式有些类似,但它们是有区分的:第一,SingleCall形式激活的工具是无形态的,工具性命期的办理是由GC卖力的;而客户端激活的工具则有形态,其性命周期能够自界说;第二,SingleCall形式在挪用工具办法时创立工具实例,而客户端激活体例在客户收回挪用哀求时举行实例化;第三,SingleCall形式下,只能挪用工具默许的机关函数,不克不及经由过程传送参数挪用自界说的机关函数来创立工具实例,而客户端激活形式能够挪用自界说的机关函数来创立实例。
4、设置文件
除经由过程编程的体例公布远程工具外,还可使用设置文件对服务器端使用程序举行设置。利用设置文件的长处在于:
●用户无需修正任何代码,就能够设置通道和远程工具,并且,不必要从头编译使用程序。
●年夜年夜削减了用于完成远程工具所必需编写的代码。
上面是一个服务器端经由过程SingCall形式激活远程工具的设置文件(定名为:DbServer.exe.config):
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknownmode="SingleCall"
type="DbServerLibrary.DbServer,DbServerLibrary"
objectUri="DbServer"/>
</service>
<channels>
<channelref="tcp"port="8888"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
假如是客户端激活形式,则把wellknown改成activated,同时删除mode属性。然后,只必要利用上面一行代码就能够公布远程工具:
RemotingConfiguration.Configure("DbServer.exe.config");
一样,客户端也能够利用设置文件来取得对远程工具的援用,在利用上述一行代码后,只必要复杂利用new运算符(还可接纳其他办法)便可以像操纵当地工具一样来操纵远程工具。因而可知,.NETRemoting为用户供应了十分天真便利的体例来公布和猎取远程工具,同时供应了便利的部署使用程序计划。
<P> 体系的完成及相干手艺
1、散布式数据库
散布式数据库是一组逻辑上属统一体系,但物理上散布在盘算机收集的分歧结点的布局化数据的汇合。与会合式数据库比拟它有以下次要长处:可办理构造机构分离而数据必要互相接洽的成绩;平衡负载――可制止临界瓶颈;牢靠性高――一般园地产生妨碍,不致引发全部体系的瘫痪;可扩大性好――可在对以后机构影响最小的情形下举行扩大。
散布式数据库中的中心成绩就是怎样来断定数据在盘算机收集中各个园地的分派计划,包含数据的散布、支解和冗余计划。本体系中利用了程度分片和引诱分片相分离的散布计划,数据完全性经由过程表间干系来限制,并经由过程在程序中捕捉非常来向用户呈报毛病信息。
2、ADO.NET
散布式数据库手艺具有诸多长处,但同时也带来新的成绩,如:数据分歧性成绩、数据远程传送的完成、通讯开支的下降等,使得散布式数据库体系的开辟变得较为庞大。办理这些成绩的一个幻想计划就是接纳.NET框架供应的ADO.NET数据会见模子。ADO.NET经由过程利用悲观分歧性计划来把持数据分歧性,可以在更少的工夫内呼应数目伟大的用户。这两种手艺的分离相得益彰,年夜年夜简化了开辟散布式数据库体系的事情量和难度。
3、远程工具的完成、公布和猎取
起首,在类库中声明一个派生自MarshalByRefObject类的远程工具类,个中界说了远程挪用所需的服务,如:数据的查询、表间的毗连和兼并等。使用ADO.NET的壮大功效能够轻松完成各类数据服务,特别它供应了对SQLSERVER的优化撑持,假如底层数据库利用SQLSERVER,将取得比利用其他数据库体系更好的功能。然后经由过程静态链接库手艺将该远程工具类封装为一个dll,然后分发到各个园地。
服务器端公布远程工具时,起首要设置一个端标语,然后创立并注册一个通道,最初公布该服务器真个激活工具。别的园地的服务器依据IP地点和收集端标语便可便利地猎取所公布的远程工具。完成远程工具公布和猎取的关头代码以下:
远程工具的公布:
TcpChannelchan=newTcpChannel(8888);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(DbServerLibrary.DbServer),"DbServer",
WellKnownObjectMode.Singleton);//以Singleton形式公布该服务器端激活工具
远程工具的猎取:
dbServer=(DbServerLibrary.DbServer)Activator.GetObject(typeof(DbServerLibrary.DbServer),
"tcp://219.224.xx.xx:8888/DbServer");
4、使用程序的部署
完成远程工具后,能够接纳多种体例举行使用程序的部署,好比,能够将每一个服务器真个远程工具程序集(DbServerLibrary.dll)部署到客户端使用程序,为加强平安性也能够经由过程部署元数据程序集或接口数据集来到达一样的完成。本体系完成时,接纳了部署元数据程序集的体例,并举行了以下摹拟:一样一台呆板经由过程利用分歧的数据库文件,来分离摹拟一台服务器和当地客户端。如许,在两台呆板上就能够测试本体系。
体系启动后,起首将各个园地的服务器使用程序启动,经由过程注册的端口吸收客户端发来的哀求。客户端在猎取用户查询哀求后,起首经由过程SQL命令剖析模块,并查询数据字典,将命令举行分化和重组,然后初始化远程工具的代办署理,将命令分派被响应的远程工具代办署理,挪用远程工具的办法,并将了局集前往,最初在界面上显现了局集,从而完成用户哀求。
总结
散布式使用程序以其高度的可扩大性和可伸缩性,同时因为资本共享进步了体系的性价比,已失掉普遍的研讨和使用,各类散布式盘算工具战争台也失掉了延长和拓展。.NETRemoting是.NET框架供应的一项壮大的手艺,使用它可使位于任何地位的使用程序相互通讯,这些使用程序大概运转在统一台盘算机上,大概局域网内的分歧盘算机上,也大概位于相隔万里的有伟大差别的收集中。
利用.NETRemoting手艺分离ADO.NET可以高效、牢靠地创建散布式数据使用程序的办理计划。其上风在于:经由过程利用.NETRemoting框架可以便利地办理数据、命令远程传送成绩;而经由过程ADO.NET对数据库能够便利地举行操纵,使散布式数据库体系中对数据库的各类操纵加倍高效、牢靠,同时易于办理数据的完全性和分歧性成绩。
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。 |
|