谈谈如何通过WEB服务器访问内网数据库服务器的原理

来源:互联网 发布:李存信 知乎 编辑:程序博客网 时间:2024/05/02 19:18
RDS(Remote Data Services,远程数据服务)是允许我们处理客户端数据的一系列服务的统称。现在不用担心这方面的问题,因为RDS本身就是ADO的一部分,只有在需要传送和使用客户端数据时,才会使用。

      远程数据服务RDS允许程序员开发原生的WINDOWS分布式多层应用系统,或是开发以浏览器为图形用户接口的WEB应用系统。

      远程数据服务RDS提供了客户端应用程序在INTERNET/INTRANET或分布式环境中使用ADO中RECORDSET对象的能力。

      可以在浏览器中通过远程数据服务RDS取得RECORDSET对象,然后在脚本语言中存取数据。或在原生WINDOWS应用程序中通过RDS取得RECORDSET对象,然后使用程序代码来存取远程数据源中的数据。RDS能够将ADO取得的数据一DCOM或HTTP通信协议由中介软件或中介组件传递给客户端,并且把数据缓存在客户端中让客户端存取数据。

      远程数据服务RDS和ADO的关系:

      程序<-->ADO<-->RDS<---->IIS/PWS<-->ODBC<-->数据库.

      当我们在程序中试图使用ADO来存取WEB数据库时,由于ADO与ODBC分属于两台通过Internet连接起来的机器上,因此数据存取方式与ADO,ODBC同属于一台机器的情况大不相同,为了让程序也一样可以利用ADO存取WEB数据库,于是诞生了RDS,而RDS的角色就象是一位帮ADO存取WEB数据库的服务员一样,所以取名“远程端数据服务”     

      实际上RDS是由几个组件构成的。图10-1说明了这些组件以及它们之间是如何协同工作的。

      组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是RDS的一部分。然而这里还是把所有可能出现的组件都放在了图上,以备需要时查看。图10-1分成了两部分,因为使用客户端数据需要一些向客户端传送数据的方法,同时数据一旦到达客户端,也需要一些管理数据的方法。我们先从服务器端开始。

10.2.1 RDS服务器组件

虽然RDS用于传送和访问客户端数据,但其确实有一些基于服务器的组件。这是必需的,因为肯定需要某种方式将数据传送到客户端。因此有了一系列能访问数据并允许发送数据到客户端的服务器组件。我们把实际的数据传送称为调度(marshal)。

服务器端组件图的最上端是数据存储,由OLE DB提供者访问。它并不是RDS的一部分,但这表示只要有相应的OLE DB提供者,就可以通过RDS在客户端使用任何数据。至于如何处理服务器上的数据,可以有两种选择:
· 数据工厂(DataFactory)是缺省的用于访问数据存储的服务器端组件。它作为服务器端RDS组件的一部分安装在计算机上,除了能从数据存储中获取数据外,还为服务器处理发送到客户端以及从客户端发送来的数据。
· 自定义组件只是一个普通的提供了数据传送方法的COM组件。当数据工厂不能提供所需的功能时,可以使用自定义组件。本章将介绍一个简单的组件例子,在本书的后面还有一个更复杂的例子。
Web服务器使用这两种组件作为客户和服务器数据的接口。

10.2.2 RDS客户组件

在客户端先从底端的DataSpace对象开始,该对象作为客户端的一部分与数据工厂或自定义对象协同工作。DataSpace对象是一个代理对象,负责与服务器进行通信,同时也是数据传输的通道(或者通常所说的调度)。DataSpace对象是用客户端脚本语言或用HTML语言中的
TDC只读取表格中的数据或标记为表格形式的数据,例如,可以处理逗号分隔形式的数据(Comma Separated Value, CSV),类似于下面的数据:
"172-32-1176","White","Bob","408 496-7223"
"219-46-8915","Green","Marjorie","415 986-7020"
"238-95-7766","Carson","Cheryl","415 548-7723"
"267-41-2394","O'Leary","Michael","408 286-2428"
"274-80-9391","Straight","Dean","415 834-2919"
"341-22-1782","Smith","Meander","913 843-0462"
"409-56-7008","Bennet","Abraham","415 658-9932"
TDC也可以自由定义。除了DataURL外,TDC还有16个参数,可以通过设置OBJECT标记的参数项或编写脚本代码来配置这些参数。参数的说明如表10-1所示:


下面是使用参数创建TDC的一个例子。

也可以在客户端脚本中获取数据,下面的例子显示了给TDC加载数据的JScript脚本。
function fillTDC()
{
       dsoAuthors.dataURL = 'authors.csv';
       dsoAuthors.Reset();
}
如果改变了TDC的DataURL参数,必须使用Reset方法,这样才能使新的URL起作用。当介绍数据绑定时,会更详细地讨论如何使用它。Reset方法是TDC唯一的一个方法。

2.  RDS数据控件

RDS数据控件能够访问一般的数据存储,而不是平面文件。它通常用于连接SQL数据库以从表、查询或存储过程获取数据。与TDC不同,RDS数据控件允许更新数据。在本章稍后通过示例说明如何进行数据更新。
类似于TDC,可以用HTML脚本中的OBJECT标记来创建一个RDS数据控件,并以类似的方式设置其属性。

 
原创粉丝点击