遠程腳本調用技術(Remote Scripting)的最大特點是:客戶端腳本調用服務器腳本時無需刷新整個頁面。一般情況 下,Web頁面需要與服務器交互時必須提交表單數據,刷新整個頁面。這不僅不利于改善瀏覽效果,也不利于提高服務器效 率。利用遠程腳本調用技術(Remote Scripting),客戶端腳本可以像調用本地函數一樣調用遠程腳本函數,從而極大地 方便了交互式Web應用的開發。使得那些基于瀏覽器的應用更接近于傳統的Win32應用。在復雜的表單驗證和頻繁的數據庫 操作中,應用遠程腳本調用技術的優點是顯而易見的。 下面以一個示例來說明。它的功能是:在客戶端輸入文字,然后調用服務器端腳本函數,把SessionID與IP地址顯示給 用戶。 一、基本原理 遠程腳本調用技術提供了一組接口函數。借助這組接口函數,客戶端程序可以通過一個代理過程(一個Java Applet) 調用服務器端代碼。JavaApplet(RSProxy.class)在后臺工作,通常情況下用戶代碼并不需要直接操作它,它的配置也是 自動完成的。遠程腳本調用既可以是同步調用(調用命令發出后一直等待,直到服務器執行函數結束后返回),也可以是 異步調用(函數調用后立即返回,調用時必須同時給出回調函數)。一個遠程腳本調用技術示例必須包含如下支持文件: RS.htm:包含客戶端支持代碼 RSProxy.class:這是一個Java Applet,實際完成客戶/服務器交互過程 RS.asp:服務器端支持代碼 (下載地址:http://msdn.microsoft.com/scripting/remotescripting/x86/rs10ben.exe) 使用遠程腳本調用功能時,客戶端和服務器端代碼都必須符合一定的要求。在服務器端,首先必須啟用遠程腳本調 用:用#include包含RS.asp,并調用RSDispatch函數(參見sample.asp文件)。在服務器端實現遠程腳本支持的關鍵在于 創建public_description對象。對于一個遠程腳本調用客戶程序來說,ASP文件可以看成是一個通過public_description對 象提供遠程方法的對象,ASP文件中的所有其它函數都是私有的。這種私有意味著,客戶程序只能對某些特定的函數實施遠 程調用。應當避免寫全局性的ASP代碼(沒有封裝在函數中的代碼),遠程調用時這些代碼是不會執行的,因為遠程調用時 腳本執行過程和普通ASP頁面執行過程是不同的。把全局腳本代碼放入函數并顯式調用,可以確保它們被正確地執行。 遠程腳本調用技術要求服務器端的腳本必須用JavaScript編寫。本例聲明了一個Description類,該類包含一個公用的 sam1函數,用new關鍵字創建Description,即public_description對象。 Sample.asp: <%@ LANGUAGE=VBSCRIPT %〉 <% RSDispatch %〉 <!--#INCLUDE FILE=″../rs.asp″--〉 <Script language=javascript runat=server〉 function Description() { this.sam1 = sam1 ; } public_description = new Description(); function sam1(str) { return ″Hi! ″+str+″:\nYour SessionID=″+session.sessionID+″\nYour IP Address=″+ Request.ServerVariables(″REMOTE_ADDR″); } </script〉 上面介紹了實現遠程腳本調用對服務器端的要求,接下來我們看看遠程調用功能對客戶端的要求。 客戶程序實現遠程調用之前必須先完成以下兩個任務:首先,啟用遠程腳本調用技術功能的Web頁面必須引用RS.htm;其 次,必須調用RSEnableRemoteScripting函數。RSEnableRemoteScripting函數允許在參數中指定RSProxy.class文件所在的 實際路徑,如果沒有指定這個參數,則默認RSProxy.class在_ScriptLibrary目錄下,如: <script language=″JavaScript″ src=″../rs.htm″> </script〉 <script language=″JavaScript″> RSEnableRemoteScripting(″..″); </script〉 二、調用遠程腳本 完成上述準備工作之后,就可以在客戶端代碼中調用服務器端函數了。遠程調用用RSExecute方法實現。該方法接受的 參數包括服務器ASP頁面的URL、遠程函數名字以及參數列表。RSExecute的調用結果是一個調用對象(Call Object)。調 用對象中包含了該次調用的返回值以及狀態信息,其主要屬性包括: id:該次調用的唯一標識。 return_value:實際返回值,如果存在的話。 data:服務器響應該次遠程調用返回的原始數據。 status:標識本次調用的狀態,-1表示失敗,0表示完成。 message:有關本次調用的文本信息。如調用成功,為“Completed.”,否則,包含錯誤說明。 data屬性實際上是一個XML字符串。當然,應用遠程腳本調用技術并不要求用戶懂得XML(也不要求用戶懂Java),這 里的XML文本是由服務器自動生成的,遠程腳本調用客戶端程序能自動解析這些XML文本。
|