下面是一个服务器端通过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为用户提供了非常灵活便捷的方式来发布和获取远程对象,同时提供了方便的部署应用程序方案。
系统的实现及相关技术
1、分布式数据库
分布式数据库是一组逻辑上属同一系统,但物理上分布在计算机网络的不同结点的结构化数据的集合。与集中式数据库相比它有如下主要优点:可解决组织机构分散而数据需要相互联系的问题;均衡负载——可避免临界瓶颈;可靠性高——个别场地发生故障,不致引起整个系统的瘫痪;可扩充性好——可在对当前机构影响最小的情况下进行扩充。
分布式数据库中的核心问题就是如何来确定数据在计算机网络中各个场地的分配方案,包括数据的分布、分割和冗余设计。本系统中使用了水平分片和诱导分片相结合的分布方案,数据完整性通过表间关系来限定,并通过在程序中捕获异常来向用户报告错误信息。
2、ADO.NET
分布式数据库技术具有诸多优点,但同时也带来新的问题,如:数据一致性问题、数据远程传递的实现、通信开销的降低等,使得分布式数据库系统的开发变得较为复杂。解决这些问题的一个理想方案就是采用
.NET框架提供的ADO.NET数据访问模型。ADO.NET通过使用乐观一致性方案来控制数据一致性,能够在更少的时间内响应数量巨大的用户。这两种技术的结合相得益彰,大大简化了开发分布式数据库系统的工作量和难度。
3、远程对象的实现、发布和获取
首先,在类库中声明一个派生自MarshalByRefObject 类的远程对象类,其中定义了远程调用所需的服务,如:数据的查询、表间的连接和合并等。利用ADO.NET
的强大功能可以轻松实现各种数据服务,尤其它提供了对SQL SERVER的优化支持,如果底层数据库使用SQL
SERVER,将获得比使用其他数据库系统更好的性能。然后通过动态链接库技术将该远程对象类封装为一个 dll,然后分发到各个场地。
服务器端发布远程对象时,首先要设置一个端口号,然后创建并注册一个通道,最后发布该服务器端的激活对象。其它场地的服务器根据IP地址和网络端口号即可方便地获取所发布的远程对象。实现远程对象发布和获取的关键代码如下:
远程对象的发布: