发信人: nightcat() 
整理人: qcrsoft(2002-05-13 16:30:26), 站内信件
 | 
 
 
专栏:ASP 文章编号:478 文章类别: 原创 作者: Batman 加贴时间:99-10- 26 下午 04:51:30 
 
 Remote Scripting技术的实现
 
 关键词:ASP
 
 Remote Scripting (RS)老早以前我就一直在说这个技术名词了,
 它到底是个什么东东了,其实RS是一种远程调用你的ASP页面
 (当然是调用你指定的URL中的ASP页面了)中的某个函数或者方法
 的技术。
 该技术主要有三大优点:
 I。你能够优化你每次从客户端到服务端的一个来回数据流程
 II。你能够在不同的ASP页面中重用(就是多次使用)同一个函数或则方法
 III。当你连接到远程的ASP页面时不会刷新你的当前正在浏览的页面
 上面是它的三大特点,下面讲讲具体的过程。
 RS让你直接调用(或则说建立一个到服务端的连接)
 注意,这也是它和RDS的不同的地方,RDS是通过一个类似与代理的机制并且
 建立的连接是在一个断开连接的记录集基础上的。
 RS在建立这个连接的时候,是不会影响当前所在的ASP页面的。
 一旦你建立了这样的一个连接后,你就能够调用任何一个在你的远程页面中
 申明为public的函数。然后你可以把调用页面需要的所有数据缓存在本地,
 当客户端的页面接受到远程调用函数的返回值后,这些返回值有可能是
 一个数组(array),记录集(recordset),字符串(string)
 接下来你就可以使用客户端的数据处理技术(例如客户端的JS,DHTML等)来对这 些
 数据进行处理了。这些数据你完全可以当作好象就是使用客户端的
 脚本函数得到的一样。
 
 RS的基本原理:
 RS是通过“RS.HTM”(这是一个客户端的模块)和“RS.asp”(这是一个服务端 的模块)
 来建立一个客户端到服务端的连接的。
 当然其中使用了一个后台加入到客户端的Java applet来实现的。
 该applet通过HTTP传递你要调用服务端上特定的ASP页面和参数。
 而客户端的页面通过调用本地的rs.htm中的函数来进行每次的远程调用申请。
 [b]所以了,大家可以想象得到要想使用RS技术的话,那么在你的ASP页面中就必 须要
 包括这些特定的页面[/b]
 
 如何使用RS
 一般只要你安装了VI后,就有了所需要的东西了。
 主要是下面的三个文件:rsproxy.class, rs.asp, rs.htm.
 把它们放到这个目录中wwwroot\_ScriptLibrary
 客户端的写法:
 然后在你想使用RS的页面的最前面包含这几个文件:
    <script language="JavaScript" 
        src="http://YourServer/_ScriptLibrary/rs.htm">   
    </script>
    <script language="JavaScript">  
       serverURL = "http://YourServer/_ScriptLibrary ";
       RSEnableRemoteScripting(serverURL); 
    </script>        
 注意其中的serverURL,它必须是你想调用服务端asp的URL地址的全写。
 例如:http://YourServer/rsdemo/server.asp
 服务端的写法:
 还要注意的是你必须要使用JavaScript来写你的远程调用部分(就是服务端的程 序)
 ,因为这些RS函数在服务端都是使用JS写的。 一个通用的写法如下:
    '必须先调用RSDispatch,而且对大小写敏感
    <% RSDispatch %>
    <SCRIPT RUNAT=SERVER Language=javascript>
    <!--#INCLUDE VIRTUAL="/_ScriptLibrary/RS.ASP"-->
 ASP远程调用对象的写法很象是在写DHTML的脚本.事实上,它必须要支持一个pub lic_description
 对象来描述通用的公共编程接口,并且实现申明所有的方法和属性:
 例子如下:
 function Description()
 { 
    this.GetEmpInfoAsArray = DoGetData;
 }
 public_description = new Description ();
 function DoGetData(employeeName)
 {
 //为了能够让RS能够识别你自己写出来的函数,
 //你必须要把它们申明成一个固定的名字public_description. 
 //然后你可以在这个DoGetData中写自己想返回的东西
 //在这个例子中将使用SQL字符串和ADO来查询微软给的例子数据库Northwind
 //当然你应该给该数据库建立一个叫NW的DSN
 aRecs = new Array();
 if (rst.RecordCount == 1)  {
    aRecs[i++] = rst.Fields("EmployeeID").Value  
    aRecs[i++] = rst.Fields("Title").Value  
    return aRecs;
 }
 当然了,你也可以把整个记录集都返回回去。
 
 好了,上面是整个服务端的写法,下面来看看客户端怎么来处理这些返回的数据 。
 在客户端可以通过一个同步的调用,如果同步调用的话所有结果都会在服务端执行 
 完毕后返回, 当然也可以通过一个异步的调用,当你一旦调用了服务端的程序后 
 就马上返回.
 这些调用都是通过RS引擎中的RSExecute函数来实现的,
 它一共有两个参数,一个是pageURL(就是前面说的asp页面的URL)
 另外一个是funcName就是你要调用的函数名。
 function RSExecute(pageURL, funcName)
 现在我想你一定会困惑了,怎么没有函数需要的输入参数呀?呵呵。
 这是因为RSExecute将使用Javascript的arguments对象,它会把该对象中的
 所有参数当成你的函数需要的参数打包成一个数组传递给服务端。
 
 co = RSExecute(pageURL, "GetEmpInfoAsArray", empName);
 if (co.status == 0)
   refreshPage(co);
 
 function refreshPage(co) {
 //你想进行的处理可以写在这下面
 
 } 
 
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.130.230.7]
  | 
 
 
 |