`
guanhuaing
  • 浏览: 1196069 次
文章分类
社区版块
存档分类
最新评论

Web服务数据库访问中间件的实现

 
阅读更多
摘要:本文分析现有的数据库访问中间件的现状,指出其中存在的问题,得出应用新技术的必要性。开发了一个基于Web服务技术的数据库访问中间件WSDBM,并以一个应用实例验证了该中间件的有效性。
关键词:Web服务;数据库访问中间件;.Net

1 引言
随着Intranet/Internet网络的迅猛发展,面向网络的分布式数据库成为支持Internet服务的关键,传统的数据库访问技术已渐渐不能满足分布式应用集成的需要。
【1】利用新技术,研究和开发新的数据库访问中间件成为数据库研究领域的主要方向之一。
Web服务是一种崭新的分布式计算模型,基于一系列开放的技术标准,其松散耦合、语言中立、平台无关性、开放性使得它将成为下一代电子商务的架构,成为下一代的WWW。
【2】Microsoft.Net提供了基于“.Net框架”的综合开发平台,它提供了涉及客户端、服务器和服务的单独、统一的编程模型。
“.Net框架”和Visual Studio.Net一起,给我们提供了一个完整的应用程序开发平台。
本文主要的工作就是在Visual Studio.Net平台上,利用Web服务将现有的数据库访问方式的封装成中间件,使得封装后的中间件可以满足分布式应用的需要。

2 Web服务中间件接口的定义
现有通用的数据库访问方式,它的主要操作有:设置数据库连接,打开和关闭数据库,执行查询和执行其他的Sql语句,实现事务管理和缓冲池管理。比较先进的数据库访问方式还支持实时数据库连接。因此,为了实现对传统数据库访问方式的封装,我们首先要定义一个Web服务,这个Web服务至少应该拥有以上所列的Web方法(属性为WebMethod的public函数成员)。这些方法就组成了这个Web服务的接口。
.Net下,Web服务的实现都封装在System.Web.Services.WebService这个类中。为了实现对数据库访问方式的Web服务的封装,我们必须定义一个新的类,它继承于WebService或是它的子类。对于相对简单的Web服务,我们直接让这个类继承于WebService。这个生成的类就成了一个具体的Web服务。
.NET中新的关系型数据管理类都是基于类库中System.Data的一系列的名称空间,通常称这些名称空间集合为ADO.NET。System . Data包含用来访问和存储关系型数据的基础对象。Visual Studio.Net直接给我们提供了System.Data.SqlClient和OleDBClient两个命名空间,这两个命名空间分别包含有用来访问Sql Server关系数据库和其他关系数据库所需的基本对象。其中以Transaction结尾的类提供了事务管理的功能,以Connection结尾的类用于连接具体的数据库。以Command结尾的类定义了对数据库表的操作。

3 Web服务中间件的实现
3.1实现框架
下面是一个简单的Web服务中间件来实现(采用Microsoft推荐的c #语言来编写)。为了实现中间件的可扩展性,我们决定不在中间件的WebMethod(Web方法)中直接实现对数据库的操作。我们先定义一个虚类 DBOperator,在这个虚类中定义了对数据库操作的接口,包括数据库的打开(Open)和关闭(Close),事务的开始(BeginTrans)、事务的递交(CommitTrans)和回滚(RollbackTrans),没有返回值的Sql语句的执行(void ExecSql)和返回数据集的Sql语句的执行(DataSet ExecSql)。这样,我们的Web服务中间件的每个WebMethod就仅仅是调用了DBOperator对象的相应的成员函数。比如Web服务中间件中的Open方法就是直接调用DBOperator对象的Open方法。
3 .2具体数据库操作的实现
为了具体实现对数据库的操作,我们需要定义DBOperator类的子类,我们以SqlDBOperator为例,显然SqlDBOperator具体实现了对Sql Server数据库的操作。

首先定义一个SqlDBOperator类,它继承于DBOperator,并导入名称空间System . Data . SqlClient。
using System.Data.SqlClient;
class SqlDBOperator:DBOperator


其次添加私有的数据成员conn,trans,inTransaction,comm
private SqlConnection conn; //数据库连接
private SqlTransaction trans; //事务处理类
private bool inTransaction=false; //指示当前是否正处于事务中
private SqlCommand comm; //数据库操作命令处理类

然后我们开始编写从DBOperator继承下来的Open操作的实现语句。
public override void Open(string connStr)
{
//如果连接是空的,就先通过connStr构造一个连接
if(conn==null)
conn=SqlConnection(connStr);
//如果这个连接没有打开,就打开这个连接
if(conn.State.ToString().ToUpper()!="OPEN")
     this.conn.Open();
}


在实现了Open(打开数据库)操作的编写之后,我们开始编写Close(关闭数据库)操作。
public override void Close()
{
//如果连接是空的,则不用关闭
if(conn==null)
return;
//如果这个连接已经打开,就关闭这个连接
if(conn.State.ToString().ToUpper()=="OPEN")
     this.conn.Close();
}


事务处理功能的实现:首先是BeginTrans(开始事务)操作的实现。
public override void BeginTrans()
{
//如果连接是空的,则没有事务可以开始
if(conn==null)
return;
/*开始conn所属的事务,并将这个事务保存下来,同时设置inTransaction(在事务中)标志为true(真)。表示在进行事务处理*/
trans=conn.BeginTransaction() ;
inTransaction=true;
}


接下来是CommitTrans(递交事务)操作的实现如下:
public override void CommitTrans()
{
trans.Commit(); //事务递交
inTransaction=false;//在事务中标志变成false;
}


同理,RollbackTrans(回滚事务)操作的实现如下:
public override void RollbackTrans ()
{
trans.Rollback(); //事务回滚
inTransaction=false;//在事务中标志变成false;
}

最后我们编写ExecSql(执行Sql语句)操作的实现:
public override void ExeSql(string strSql,string[] strParams,object[] strValues)
{
//如果comm(处理Sql语句的对象)为空,则生成这个对象
if(comm==null)
comm=new SqlCommand();
//设置这个对象的连接conn
   comm.Connection=this.conn ;
//判断是否在事务中,是就设置comm的事务对象属性
if(inTransaction)
   comm.Transaction=trans;
//判断参数个数和参数值个数是否相等,不等,就不能执行这个Sql语句
if((strParams!=null)&&(strParams.Length!=strValues.Length) )
throw new Exception("查询参数和值不对应!");
//设置这个comm对象的命令文本
comm.CommandText=strSql;
   //将参数名称和对应的参数值保存到comm的参数数组中
if(strParams!=null)
{
   for(int i=0;i<strParams.Length;comm.Parameters.Add(strParams[i],strValues[i]));
}
//执行这个没有返回值的查询
  comm.ExecuteNonQuery();
}


下面是有返回值的ExecSql操作的实现:
public override DataSet ExeSqlForDataSet(string queryString)
{
//如果comm(处理Sql语句的对象)为空,则生成这个对象
if(comm==null)
comm=new SqlCommand();
//设置这个对象的连接conn
   comm.Connection=this.conn ;
   //判断是否在事务中,就是设置comm的事务对象属性
if(inTransaction)
   comm.Transaction=trans;
//生成一个数据集(DataSet)对象(ds),用它来保存返回的查询结果
DataSet ds = new DataSet();
//定义一个SqlDataAdpater类的对象ad。
   SqlDataAdapter ad = new SqlDataAdapter();
//设置这个comm对象的命令文本
comm.CommandText=queryString;
   //设置ad的SelectCommand属性为comm。
//SelectCommand是DataAdapter对象的一个属性,表示Transact-SQL语句或存储过程,用于在数据源中选择记录。
ad.SelectCommand =comm;
   //ad执行fill操作,结果保存到ds中
ad.Fill(ds);
   //ds返回
return ds;
}

4 使用已定义的Web服务中间件来访问数据库的使用场合
下面我们假设一种该中间件使用的具体情况:
假设有一个私有的比较大型的书店,书店的老板家在离书店有一段距离,在书店和老板家之间架设局域网是不现实的,而老板需要在家里就可以使用书店的管理系统,甚至进行日常工作的管理。也就是说,老板需要实现在家里办公。为此,书店老板决定让某IT公司开发这个系统。
某IT公司在接到该书店老板提出的开发意向后,在进行初步的系统调研之后,决定接下这个IT订单,由于这个书店老板并没有提出具体的解决方案(他也不懂),所以IT公司人员思考了以下几个开发方案:
在传统的解决方案中,我们可以采用了动态网页的编程方法,也就是建立一个网站,这样,在互联网的任何地方,我都可以通过这个网站进行访问,这种实现方法非常优秀,现有的很多公司门户就是使用了这种技术实现的。但是这种技术有一个缺点是,书店需要有自己的Web服务,这就增加了实现成本。同时这种方案的实现也抛弃了现有的解决方案(书店在建立初期就请某IT公司专门开发一个专用的书店管理系统),抛弃这个 Legacy(遗产),重新进行设计,书店老板也不愿意。
另一个传统的解决方案是利用Corba或DCOM进行编程。原有系统就是利用Visual C++进行编程的。所以可以选择DCOM进行编程,这也非常合理。但是这个方案限制了实现的平台,同时开发费用较高,毕竟利用DCOM进行编程开发和实现是一件比较复杂的工作。
最后,公司决定利用Web服务技术封装原有的数据库访问层,这样我们的客户端仅需要进行数据库访问层的修改。这样,系统原来的界面不便,Business层(业务层)不变,改变的仅仅是客户端的的数据库访问层的实现。以上就是这个Web服务使用的具体场合。
下面我们在Visual Studio.Net平台上利用c# Windows应用程序编程项目来说明该Web服务的使用。
首先新建一个C# Windows应用程序项目,在窗体上添加控件,一个DataGrid和一个按钮。
然后添加Web引用,将该Web服务中间件所在的asmx文件地址添加到Web引用中。这样我们就可以直接使用这个服务了。
双击按钮1,编程如下:
//新建一个Web服务的实例
WebReference.ServiceWSDBM the=new WindowsApplication1.WebReference.ServiceWSDBM();
//以数据库连接字符串为参数,打开上面的连接字符串所可以连接的数据库
the.Open("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Northwind;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False");
the.Open();
//对已经打开的数据库进行查询操作,返回记录集。
System.Data.DataSet ds=the.exeSqlForDataSet("select * from products");
//将查询得到的记录集显示在DataGrid中
dataGrid1.DataSource=ds;
dataGrid1.DataMember=ds.Tables[0].TableName;
//关闭这个连接
the.Close();
执行结果,在DataGrid中将显示出连接上的Sql Server库中的products表中的内容。
5 结束语
根据以上的介绍,基于Web服务实现的数据库访问中间件,可以扩展数据库系统的应用范围,这种中间件不仅适应于局域网,更加适应于未来的基于广域网的应用程序。这个中间件于传统中间件相比有以下优点: 1)跨平台。2)使用方便,可以将这个Web服务可以象本地组件一样被应用。3)兼容性强,扩展方便,比如我们想要增加对Oracle的支持,仅需下载和 Oracle有关的.Net插件(下载地址:可到http://msdn.microsoft.com/downloads/上下载.Net Framework Data Provider for Oracle),然后将上述程序中的Sql替换为Oracle即可。综上所述,基于Web服务实现数据库访问中间件将是一种比较有效的解决方案。

原文出处:http://www.ahcit.com/lanmuyd.asp?id=1153
分享到:
评论

相关推荐

    Web服务数据库访问中间件的实现[借鉴].pdf

    Web服务数据库访问中间件的实现[借鉴].pdf

    基于Web服务的SQL数据库访问中间件的设计与实现.pdf

    基于Web服务的SQL数据库访问中间件的设计与实现.pdf

    论文研究-中间件技术在Web数据库访问中的应用研究.pdf

    介绍了中间件技术在B/S多层体系结构中的作用,分析了CGI,ASP,JDBC等中间件技术各自的特点和它们在Web数据库访问中的应用,最后给出了基于Servlet/JSP技术的Web数据库访问技术的实现模型。

    JAVA在WEB数据库中间件的应用

    随着世界范围内Internet 的深入应用,全球进入一个以网络为中心...该文在分析数据库中间件的基础上,重点描述了一种基于java 中间件技术的数据库访问模型,最后说明了如何实现WEB 环境下对分布式异构数据库的透明访问。

    在Flash中实现与数据库的连接 (1)

    实现Web数据库的应用一般有两种方法:一种是Web服务器端提供中间件,连接Web服务器与数据库服务器;另一种是把应用程序下载到客户端直接访问数据库。最常用的中间件技术有通用网关接口(CGI)和应用程序编程接口(API)...

    Web数据库现状与发展

    介绍了Web数据库的CCI , Web服务器应用程序接口、数据库服务)一商提供的接口、Java数据库接口JDBC等访问技术以及产生的儿种中间件产品。针对Web数据库的研究状况介绍了多表查询以及优化技术.分析了安全隐患以及防范...

    易语言NetDB数据库操作中间件

    支持数据库类型:mysql mssql sqlite access 本中间件需要驱动运行 ------------------------------------------------------------------ 虽然我不经常在线,但是有信号了我会关注群内的消息,第一时间解决问题 --...

    在Flash中实现与数据库的连接 (2)

    实现Web数据库的应用一般有两种方法:一种是Web服务器端提供中间件,连接Web服务器与数据库服务器;另一种是把应用程序下载到客户端直接访问数据库。最常用的中间件技术有通用网关接口(CGI)和应用程序编程接口(API)...

    应用服务器中间件技术要求.doc

    " " "支持对系统运行状态、Web应用、EJB组件、数据库连接" " "池、交易服务、JMS服务及其它服务端组件与服务进行 " " "动态监控与管理。 " " "Web应用和ear的部署和管理也可以通过Web管理控制台 " " "进行,可以在...

    数据库系统-招标参数---模板.doc

    " " "数据管理功能 "数据库产品提供数据压缩的商务和技术许可,提供" " " "数据存储能力,和访问效率。 " " " "策略式的管理,很大程度可以简化整个数据库维护" " " "和管理工作。可以同时管理多台服务器,在一台数...

    WebRobot.rar

    一款在Web服务器端提供中间件来连接Web服务器和数据库服务器,另一种是把应用程序下载到客户端并在客户端直接访问数据库

    安全的最后一公里:特权访问安全.pdf

    ... 各类中间件系统管理账号,如WEBSHPERE、WEBLOGIC、 TOMCAT(连接池账号、Web Console)...应用系统内嵌账号,如应用系统源码、配置文件、中间件中的数据库访问账号、API接口账号、Web Console...... 业务前台管理

    ralasafe 权限管理中间件

    Ralasafe访问控制中间件(数据级权限管理),是MIT协议开源免费软件产品。它使用图形化方式处理各种数据级权限管理问题,包括数据库行列级、字段内容级权限问题;它还能处理登录控制、功能级权限控制和URL权限认证。...

    NASASpaceApps-Mapping-WebServices:安卓中间件

    架构决策是由使用 Web 服务访问我们的中间件层所提供的可重用性驱动的。 这使我们能够拥有多个利用相同中间件层的开发流。 我们追求的两个开发流程是一个网站,该网站将有关水样信息的信息与我们的数据库进行通信,...

    基于中间件技术在动态船期表中的应用与实现

    论文围绕船期表的数据处理,基于Web Services,XML等...通过将基于 XML 的消息用作创建和访问服务的机制, Web services 客户端和 Web services 提供商除了需要了解对方的输入、输出和位置以外,不再需要任何其他信息。

    Oracle 融合中间件中文产品技术白皮书(非常有价值)

    在 SOA 中使用 ODI 套件实现企业数据服务 (PDF) SOA 治理解决方案 (PDF) ORACLE 企业管理器 10g 数据屏蔽包 (PDF) 确保面向服务的体系结构的 Web 服务质量 (PDF) 快速瓶颈识别 — 更好的负载测试方法 (PDF) Oracle ...

    Java-Web程序设计实战-第8章-JDBC详解.pptx

    Java程序的JDBC可以分为如下四种驱动类型: 1)JDBC-ODBC桥 ODBC是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的...

    袋鼠蛋动态web服务器

    在java中间件中大部分人都知道tomcat,一个开源免费的web服务器,不过今天要介绍的是一个国内自主开发的web服务器,它的名字叫“袋 &lt;br/&gt;*鼠*蛋”,同样是开源免费的,但是它所运行的不是JSP脚本语言,而是自己...

    SOAOFFICE - 微软 OFFICE 中间件

    10.Web系统中调用Word/Excel的页面有大量并发用户访问的; 11.使用jacob、jxl、apache poi的; 12.需要在Web中调用Word/Excel,并且追求系统运行稳定、可靠的; 13.最终用户可以浏览 Word/Excel/Ppt 文档内容,但...

    基于Ansible和Flume的海量数据自动化采集系统

    同时由Flume配置采集agent到各数据库和中间件服务器中,进行日志数据的采集、预处理和下放,并将数据输出到数据库中,实现对数据库和中间件运行数据的自动化采集与管理。经系统测试,该系统可以高效完成多线程Web...

Global site tag (gtag.js) - Google Analytics