当调用客户端“代理”上的某种方法时,服务器上的实际程序将执行该方法。在此步骤中,您将在服务器上执行一个查询。
A 部分 如果未在本教程中使用 RDSServer.DataFactory,那么执行本步骤最方便的途径是使用 RDS.DataControl 对象。RDS.DataControl 将上一步(创建代理)和本步骤(发出查询)结合起来。
设置 RDS.DataControl 对象的 Server 属性以标识实例化服务器程序的位置;设置 Connect 属性以指定访问数据源的连接字符串;设置 SQL 属性以指定查询命令文本。然后发出 Refresh 方法,使服务器程序连接到数据源、检索查询指定的行以及将 Recordset 对象返回到客户端。
本教程不使用 RDS.DataControl,但如果使用 RDS.DataControl,其形式如下:
Sub RDSTutorial2A() Dim DC as New RDS.DataControl DC.Server = "http://yourServer" DC.Connect = "DSN=Pubs" DC.SQL = "SELECT * FROM Authors" DC.Refresh ...
本教程也不通过 ADO 对象调用 RDS,但是如果调用 RDS,其形式如下:
Dim rs as New ADODB.Recordset rs.Open "SELECT * FROM Authors", "Provider=MS Remote;Data Source=Pubs;Remote Server=http://YourServer" 本主题属于microsoft官方文档。
远程数据访问的解决方案
问题 ADO 使应用程序能够直接访问和修改数据源(有时称为双层系统)。例如,如果连接是到包含用户数据的数据源,那么它是双层系统中的一个直接连接。
但是,有时也需要通过 Microsoft Internet Information Services (IIS) 这样的媒介间接访问数据源。这种方案有时称为三层系统。IIS 是客户端/服务器系统,可帮助本地或客户端应用程序通过 Internet 或 Intranet 高效地调用远程或服务器程序。服务器程序可以访问数据源,并有选择地处理所获得的数据。
例如,Intranet Web 页包含连接到 IIS 的应用程序,该应用程序是用 Microsoft Visual Basic Scripting Edition (VBScript) 编写的。IIS 将依次连接到实际数据源,检索数据,以某种方式处理数据,然后将处理后的信息返回到应用程序。
在此范例中,应用程序并未直接连接到数据源,而是通过 IIS 连接到数据源。并且,IIS 通过 ADO 访问数据。
注意 客户端/服务器应用程序无须基于 Internet 或 Intranet(即基于 Web),它可以仅由局域网上的已编译程序组成。但通常是基于 Web 的应用程序。
因为某些可视控件(如网格、复选框或列表)可能会使用返回的信息,所以返回的信息必须易于被可视控件使用。
用户需要的是简单而有效的应用程序编程接口,该接口支持三层系统,并能够象在双层系统上检索一样易于返回信息。远程数据服务 (RDS) 便是这样的接口。
解决方案
www.aspxuexi.com整理 RDS 定义编程模型(即访问和更新数据源所必需的活动的序列),以便通过 Internet Information Services (IIS) 这样的媒介访问数据。编程模型汇总了 RDS 的所有功能。
基本 RDS 编程模型
RDS 阐述了存在于下列环境中的应用程序:客户端应用程序指定将在服务器上执行的程序,并指定返回需要的信息所需的参数。在服务器上调用的程序访问指定的数据源,检索信息,有选择地处理数据,然后将得到的信息以客户端应用程序易于使用的格式返回客户端应用程序。RDS 提供执行以下操作序列的方式:
指定服务器上要调用的程序,并获取从客户端引用该程序的方法。(这种引用有时称为“代理”。它表示远程服务器程序。客户端应用程序将象调用本地程序一样调用代理,但实际上是调用远程服务器程序。)
调用服务器程序。将参数传递给标识数据源和要发出的命令的服务器程序。(实际上,服务器程序使用 ADO 访问数据源。ADO 与一个给定的参数相连接,然后发出在其他参数中指定的命令。)
服务器程序从数据源获取 Recordset 对象。可选,也可在服务器上处理 Recordset 对象。
服务器程序将最终的 Recordset 对象返回到客户端应用程序。
在客户端,将 Recordset 对象转换为可视控件易于使用的格式。
对 Recordset 对象所做的任何修改都将被发送回服务器程序,服务器程序用它们来更新数据源。 此编程模型包含某些简便功能。如果不需要复杂的服务器程序来访问数据源,而且提供了所需的连接和命令参数,RDS 将用简单的默认服务器程序来自动检索指定的数据。
但是,如果需要更复杂的处理,可以指定自定义的服务器程序。例如,因为自定义服务器程序有足够的 ADO 处置能力,所以能连接几个不同的数据源,并把这些数据以某种复杂的方式结合起来,然后将经过处理的简单结果返回给客户端应用程序。
最后,如果在其间还需要别的方式,ADO 支持自定义默认服务器程序的行为。
RDS 编程模型详细信息
下面是 RDS 编程模型中的关键元素:
RDS.DataSpace DataSpace 对象 (RDS)
创建客户端的代理以自定义位于中间层的业务对象。
说明
远程数据服务需要业务对象代理,这样客户端组件就可以与位于中间层的业务对象进行通讯。代理便于对跨越进程或计算机边界的应用程序的 Recordset 数据进行打包、拆包和传输(调度)。
远程数据服务使用 RDS.DataSpace 对象的 CreateObject 方法来创建业务对象代理。只要创建了相应的中间层业务对象的实例,就会动态创建业务对象代理。远程数据服务支持以下协议:HTTP、HTTPS(HTTP 安全套接字)、DCOM 以及进程内(客户端组件和业务对象驻留在同一台计算机上)。
注意 当 RDS.DataSpace 对象使用 HTTP 或 HTTPS 协议时,RDS 以“无状态信息”的方式运转。即当服务器返回一个响应后,任何关于客户请求的内部信息都将被放弃。
尽管业务对象对于业务对象代理的整个执行过程都看似存在,但实际上只有在请求接收到响应时,业务对象才存在。当请求发出(即在业务对象上调用一种方法)时,代理打开一个到服务器的新连接,并且服务器创建一个业务对象的新实例。当业务对象响应请求以后,服务器破坏业务对象并关闭连接。
这表明您不能使用业务对象属性或变量将数据从一个请求传递到另一个请求。必须采用其他机制(如文件或方法参数)来持久保留状态数据。
RDS.DataSpace 对象的类 ID 为 BD96C556-65A3-11D0-983A-00C04FC29E36。
/>
RDSServer.DataFactory DataFactory 对象 (RDSServer)
此默认的服务器端业务对象实现对客户端应用程序的指定数据源进行读/写数据访问的方法。
说明
RDSServer.DataFactory 对象被设计为服务器端的 Automation 对象,可以接收客户端请求。在 Internet 实现过程中,它驻留在 Web 服务器上,并通过 ADISAPI 组件实例化。RDSServer.DataFactory 对象提供对指定数据源的读写访问,但不包含任何验证或业务规则逻辑。
如果使用在 RDSServer.DataFactory 和 RDS.DataControl 对象中都有效的方法,远程数据服务将默认使用 RDS.DataControl 版本。默认采用基本编程方案,在此方案中,RDSServer.DataFactory 用作常规服务器端业务对象。
如果要让 Web 应用程序处理任务特有的服务器端进程,可以用自定义业务对象替代 RDSServer.DataFactory。
可以创建调用 RDSServer.DataFactory 方法的服务器端业务对象,如 Query 和 CreateRecordset。这有助于向业务对象添加功能,而利用现有的远程数据服务技术。
RDSServer.DataFactory 对象的类 ID 为 9381D8F5-0288-11D0-9501-00AA00B911A5。
|