基于.NET Remoting技术构建分布式数据库查询

.NET Remoting 实现远程数据库访问源码 .NET Remoting 实现远程数据库访问源码 实际可用的 立即下载
 
摘要:.NET Remoting 作为DCOM的替代,被誉为管理应用程序域之间的远程过程调用( RPC ) 的首选技术。它是指利用运行库的服务,调用那些运行在不同应用程序域中的对象的方法并共享其数据,提供了一种允许对象通过应用程序域与另一对象进行交互的框架。作为一种分布式处理方式,得到了日趋广泛的应用。文中通过一个分步式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。
 
关键字:Remoting,应用程序域,远程对象,分布式数据库,ADO.NET
 
 
Abstract: As a substitute of DCOM, .NET Remoting is acknowledged as the most commonly used technology in managing RPC between application domains. With services of CLR,.NET Remoting framework provides interaction between an AppDomain and another object and it can calls methods of objects which running in different AppDomains and share the data. It is getting more and more widely used as an distributed solution to enterprise. This paper deals with the application of .NET Remoting through a distributed database query, and it shows that distributed applications can be easily and neatly built based on .NET Remoting.
 
Keywords: Remoting, Application Domain, Remote Object, Distributed Database, ADO.NET 

0 引言

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

1 Remoting 框架简介

         .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这种框架提供了多种服务,包括激活和生存期支持,以及负责与远程应用程序进行消息传输的通讯通道。而且,.NET Remoting 是一个内容丰富的、可扩展的框架,它使得分布在不同应用程序域(AppDomain)、不同进程和不同计算机上的对象可以实现无缝通信。它提供的编程模型和运行时支持,功能强大且非常便捷,能够实现透明的交互。

2理解Remoting框架

2.1 基本原理

点击在新窗口查看全图

图1 .NET Remoting体系结构图
     .NET Remoting中通过通道(channel)来实现两个应用程序域之间的对象通信。Remoting的通道主要有两种:Tcp和Http。在.NET中,System.Runtime.Remoting.Channel中定义了IChannel接口。IChannel接口包括了TcpChannel通道类型和Http通道类型。它们分别对应Remoting通道的这两种类型。通道对象代表了到远程应用程序的连接。每个通道对象还包含格式化程序对象,将方法调用转换为已知格式的消息。
   
其基本原理如图1所示,首先,客户端通过通道访问服务器端对象,以获得服务器端对象的代理。服务器端对象也即通常所说的远程对象,使用时是通过跨应用程序边界传递对象引用获得该远程对象的代理。对于客户程序来说,代理提供了与远程对象完全一样的方法和属性。当代理的方法别调用时,就会创建消息,通过使用格式化程序类,将这些消息串行化并发送到客户通道中。客户通道和服务器通道进行通信,以通过网络传输消息。服务器通道则使用格式化程序并行化消息,从而将方法发送给远程对象。通过代理,客户端应用程序就可以像使用本地对象一样来操作远程对象。

2.2 应用程序域

Windows操作系统将应用程序分离为单独的进程,形成应用程序代码及其数据的保护边界。虽然进程在隔离应用程序方面是有效的,但同样有缺点:首先,进程属于低级的操作系统结构,管理进程要涉及很多操作系统行为;其次创建和管理进程是一项非常昂贵的任务,如果不采用进程间通信(Interprocess Communication,IPC)机制,在一个进程中执行的代码就不能访问另一进程,而采用IPC 机制的额外开销往往使得最后得不偿失。在很多情况下,我们需要一个对象跨过应用程序域,与另一对象进行交互。.NET 所引入的应用程序域对上述问题进行了很好的解决。应用程序域是 .NET 运行库的逻辑进程表示,任何实际的操作系统进程可以包含多个应用程序域。应用程序域具有以下优点:
l          隐藏了进程具体的操作系统信息。
l          应用程序域同样提供了隔离,所有 .NET 对象都界定在创建它的应用程序域中。
l          对于不需要昂贵的IPC 机制的进程,应用程序域允许 .NET 运行库优化运行于其中的应用程序间的通信。

2.3 远程对象的激活方式

远程对象派生自System.marshalByRefObject类,访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程进行创建并初始化。这种客户端通过通道来创建远程对象的行为称为远程对象的激活。在Remoting中,远程对象的激活分为两大类:
l          服务器端激活:又称为WellKnown方式,通过这种方式激活的对象称为服务器端激活对象或者知名对象。这是因为服务器端应用程序在激活对象实例之前会通过一个众所周知的统一资源标识符(URI)来发布这个类型。.Net Remoting把服务器端激活又分为Singleton模式和SingleCall模式两种。Singleton模式即指运行库只创建一个对象接受所有的客户端请求,并通过租赁策略控制其生存期;而在SingleCall模式中,运行库将为每个客户端请求建立一个新对象,并在完成请求后释放这个对象,由垃圾收集器(GC)进行销毁。
l          客户端激活:在这种模式下,一旦服务器端获得客户端的请求,将为每一个客户端都建立一个实例引用。虽然这种模式与服务器端激活的SingleCall模式有些相似,但它们是有区别的:第一,SingleCall模式激活的对象是无状态的,对象生命期的管理是由GC负责的;而客户端激活的对象则有状态,其生命周期可以自定义;第二,SingleCall模式在调用对象方法时创建对象实例,而客户端激活方式在客户发出调用请求时进行实例化;第三,SingleCall模式下,只能调用对象默认的构造函数,不能通过传递参数调用自定义的构造函数来创建对象实例,而客户端激活模式可以调用自定义的构造函数来创建实例。

2.4 配置文件

       除了通过编程的方式发布远程对象外,还可以使用配置文件对服务器端应用程序进行配置。使用配置文件的优点在于:
l          用户无需修改任何代码,就可以配置通道和远程对象,而且,不需要重新编译应用程序。
l          大大减少了用于实现远程对象所必须编写的代码。
下面是一个服务器端通过SingCall模式激活远程对象的配置文件(命名为:DbServer.exe.config):
<configuration>
          <system.runtime.remoting>
              <application>
                   <service>
                        <wellknown mode = "SingleCall"
                                   type = "DbServerLibrary.DbServer, DbServerLibrary"
                                   objectUri = "DbServer "/>
                   </service>
                   <channels>
                        <channel ref = "tcp" port = "8888" />
                   </channels>
              </application>
          </system.runtime.remoting>
</configuration>
如果是客户端激活模式,则把wellknown改为activated,同时删除mode属性。然后,只需要使用下面一行代码就可以发布远程对象:
RemotingConfiguration.Configure("DbServer.exe.config");
同样,客户端也可以使用配置文件来获得对远程对象的引用,在使用上述一行代码后,只需要简单使用new运算符(还可采用其他方法)即可以像操作本地对象一样来操作远程对象。由此可见,.NET Remoting为用户提供了非常灵活便捷的方式来发布和获取远程对象,同时提供了方便的部署应用程序方案。

3.系统的实现及相关技术

3.1分布式数据库

分布式数据库是一组逻辑上属同一系统但物理上分布在计算机网络的不同结点的结构化数据的集合。与集中式数据库相比它有如下主要优点:可解决组织机构分散而数据需要相互联系的问题;均衡负载——可避免临界瓶颈;可靠性高——个别场地发生故障,不致引起整个系统的瘫痪;可扩充性好——可在对当前机构影响最小的情况下进行扩充。
分布式数据库中的核心问题就是如何来确定数据在计算机网络中各个场地的分配方案,包括数据的分布、分割和冗余设计。本系统中使用了水平分片和诱导分片相结合的分布方案,数据完整性通过表间关系来限定,并通过在程序中捕获异常来向用户报告错误信息。

3.2 ADO.NET

分布式数据库技术具有诸多优点,但同时也带来新的问题,如:数据一致性问题、数据远程传递的实现、通信开销的降低等,使得分布式数据库系统的开发变得较为复杂。解决这些问题的一个理想方案就是采用 .NET框架提供的ADO.NET数据访问模型。ADO.NET通过使用乐观一致性方案来控制数据一致性,能够在更少的时间内响应数量巨大的用户。这两种技术的结合相得益彰,大大简化了开发分布式数据库系统的工作量和难度。

3.3 远程对象的实现、发布和获取

首先,在类库中声明一个派生自MarshalByRefObject 类的远程对象类,其中定义了远程调用所需的服务,如:数据的查询、表间的连接和合并等。利用ADO.NET 的强大功能可以轻松实现各种数据服务,尤其它提供了对SQL SERVER的优化支持,如果底层数据库使用SQL SERVER,将获得比使用其他数据库系统更好的性能。然后通过动态链接库技术将该远程对象类封装为一个 dll,然后分发到各个场地。
服务器端发布远程对象时,首先要设置一个端口号,然后创建并注册一个通道,最后发布该服务器端的激活对象。其它场地的服务器根据IP地址和网络端口号即可方便地获取所发布的远程对象。实现远程对象发布和获取的关键代码如下:
远程对象的发布:
     TcpChannel chan = new TcpChannel(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");

3.4 应用程序的部署

    实现远程对象后,可以采用多种方式进行应用程序的部署,比如,可以将每个服务器端的远程对象程序集(DbServerLibrary.dll)部署到客户端应用程序,为增强安全性也可以通过部署元数据程序集或接口数据集来达到同样的实现。本系统实现时,采用了部署元数据程序集的方式,并进行了以下模拟:同样一台机器通过使用不同的数据库文件,来分别模拟一台服务器和本地客户端。这样,在两台机器上就可以测试本系统。
系统启动后,首先将各个场地的服务器应用程序启动,通过注册的端口接收客户端发来的请求。客户端在获取用户查询请求后,首先通过SQL命令解析模块,并查询数据字典,将命令进行分解和重组,然后初始化远程对象的代理,将命令分配被相应的远程对象代理,调用远程对象的方法,并将结果集返回,最后在界面上显示结果集,从而完成用户请求。

4.总结

分布式应用程序以其高度的可扩展性和可伸缩性,同时由于资源共享提高了系统的性价比,已经得到广泛的研究和应用,各种分布式计算对象和平台也得到了延伸和拓展。.NET Remoting 是.NET框架提供的一项强大的技术,利用它可以使位于任何位置的应用程序互相通信,这些应用程序可能运行在同一台计算机上,或者局域网内的不同计算机上,也可能位于相隔万里的有巨大差异的网络中。
使用.NET Remoting技术结合ADO.NET能够高效、可靠地建立分布式数据应用程序的解决方案。其优势在于:通过使用. NET Remoting框架能够方便地解决数据、命令远程传递问题;而通过ADO. NET 对数据库可以方便地进行操作,使分布式数据库系统中对数据库的各种操作更加高效、可靠,同时易于解决数据的完整性和一致性问题。
C# .Net Remoting 部署在IIS上的实例 将.Net Remoting发布到IIS上的实例。 建议先看一下配置步骤:http://www.our-code.com/news/2010107/n6231154.html 开发环境:VS2005 C# 立即下载

相关推荐

基于_NETRemoting技术构建分布式数据库查询

基于_NETRemoting技术构建分布式数据库查询

.NET Remoting构建分布式数据库查询

转自:http://dev.yesky.com/msdn/424/2359424_1.shtml摘要 .NET Remoting 作为DCOM的替代,得到了日趋广泛的应用。本文中通过一个分布式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。  关键字 Remoting,应用程序域,远程对象,分布式数据库,ADO.NET  引...

weixin_30412577的博客 83

基于remoting的数据库开发应用

研究了许久的remoting还是发现这个例子对于初学者很实用。

分布式数据库查询思想精要

  摘要 .NET Remoting 作为DCOM的替代,得到了日趋广泛的应用。本文中通过一个分布式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。   关键字 Remoting,应用程序域,远程对象,分布式数据库,ADO.N

RainyLin-SunnyLin的专栏 1064

.NET Remoting实现分布式数据库查询

远程处理是.NET框架提供的一项强大的技术,利用它可以使位于任何位置的应用程序互相通信,这些应用程序可能在同一台计算机上运行,也可能位于同一局域网中的不同计算机上,或者位于相隔万里的有巨大差异的网络中。使用.NET Remoting技术结合ADO.Net能够高效、可靠地解决这两方面的问题。具体表现为,在C#中通过使用.Net远程处理框架能够方便地解决数据、命令远程传递问题;C#通过ADO.Net对数据库进行操作,使分布式数据库系统中对数据库的各种操作变得高效、可靠,同时易于解决数据一致性问题。

等保三级-MySQL 安全加固实战指南

本文详细介绍了MySQL数据库在等保三级要求下的安全加固实战指南,涵盖身份鉴别、访问控制、安全审计、网络传输安全、入侵防范和数据完整性等关键领域。通过具体配置示例和实战经验,帮助用户有效提升MySQL数据库的安全防护能力,满足等保三级合规要求。

weixin_29197835的博客 183

.Net实现分布式数据库查询2

摘要 .NET Remoting 作为DCOM的替代,得到了日趋广泛的应用。本文中通过一个分布式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。  关键字 Remoting,应用程序域,远程对象,分布式数据库,ADO.NET  引言   随着传统的数据库、计算机网络和数字通信技术的快速发展,以数据分布存储和分布处理为主要特征的

HYH的专栏 1126

从零到一:Firefly-RK3399上的Ubuntu镜像构建与GPU加速实战

本文详细介绍了在Firefly-RK3399开发板上从零构建深度优化的Ubuntu系统镜像的全过程,包括交叉编译环境配置、内核定制、GPU加速环境部署(Mesa Panfrost驱动、OpenCL/Vulkan支持)以及深度学习推理优化(TFLite + LinuxNN)。通过实战案例展示了如何充分发挥Mali-T860 GPU的硬件潜力,提升边缘AI应用的性能和能效。

pz8901234的博客 1020

.NET Remoting 实现分布式数据库查询

摘要:.NET Remoting 作为DCOM的替代,被誉为管理应用程序域之间的远程过程调用( RPC ) 的首选技术。它是指利用运行库的服务,调用那些运行在不同应用程序域中的对象的方法并共享其数据,提供了一种允许对象通过应用程序域与另一对象进行交互的框架。作为一种分布式处理方式,得到了日趋广泛的应用。文中通过一个分步式数据库查询系统的解决方案,探讨了 Remoting 技术的应用,同时也说明了使用该技术可以非常便捷地构建分布式应用程序。

tannafe的专栏 1241

手把手教你解决Realsense D455在ROS下IMU数据不输出的问题(附固件降级指南)

本文详细解析了Realsense D455在ROS环境下IMU数据不输出的问题,提供了固件降级和ROS配置的完整解决方案。通过版本兼容性分析和实战操作指南,帮助开发者快速恢复IMU数据流,优化机器人开发体验。

weixin_42531494的博客 372

全网最全vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法)

markdown-it | markdown-it 中文文档上面的是 markdown-it 中文文档链接 ,供参考使用核心的东西就这些啦,如果有其他想问的,评论区留言即可~博客写作不易,希望大家多多支持,多多捧场~~~最后给大家分享一下 typed.js 网址,网上比较多,我觉得这个比较好理解一些Typed.js - Type your heart out (mattboldt.github.io)[这里是图片011]https://mattboldt.github.io/typed.js/

m0_74825108的博客 3057

remoting将服务器查询到的信息传送到客户端,.NET Remoting构建分布式数据库查询

严正声明:本文为作者原创,未经允许不得再任意转载。(部分转载者无视他人劳动成果,将作者改为自己,剽窃者的文中没有图示)第1章 系统总体结构1.1 总体结构图系统实现需要部署服务器端的远程对象(即一个DbServerLibrary.dll),服务器端要注册通道和该远程对象。客户端要实现一个本地查询的服务器,同时根据SQL解析的结果向各个服务器发送命令,并将结果显示在客户端界面,服务器端可以接受并显示...

weixin_33256627的博客 243

国产信创服务器软硬件兼容情况1 --- ARM架构

信创,即信息技术应用创新产业,它是数据安全、网络安全的基础,也是新基建的重要组成部分...

一只猿的自我修养 4741

.NET Remoting 实现分布式数据库查询(ZT)

前段时间,高级数据库原理课程结课,老师布置了一个大作业——实现一个分布式数据库查询系统,因为鄙人一直学习.net,故想使用这个平台实现,以进一步提高自身的水平。开始热情致高,吾在网上搜了N天,也没有什么好的资料,只找到一篇题目为《利用C#实现分布式数据库查询》的文章,此篇文章在多个site上都有雷同,作者不详……      摸索了几天,找到了实现的方案——.NET Remoting 技术可以实现远

王涛的BLOG 2143

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 121

欺诈文本分类微调(一):基座模型选型

通义千问Qwen2具有0.5B、1.5B、7B、72B等一系列参数大小不等的模型,我们需要做的是从大到小依次测试每个模型的能力,找到满足自己需要的最小参数模型。依1.5B和1.5B-Instruct的主要区别:按照官方文档,前者是预训练模型,后者是经过指令微调的模型。

golfxiao的专栏 2655
上一篇: web service 和 remoting 有什么区别
下一篇: ASP.NET缓存
NETZHOU
博客等级 码龄24年 10粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值