|
遠(yuǎn)程腳本調(diào)用技術(shù)(Remote Scripting)的最大特點(diǎn)是:客戶端腳本調(diào)用服務(wù)器腳本時(shí)無(wú)需刷新整個(gè)頁(yè)面。一般情況 下,Web頁(yè)面需要與服務(wù)器交互時(shí)必須提交表單數(shù)據(jù),刷新整個(gè)頁(yè)面。這不僅不利于改善瀏覽效果,也不利于提高服務(wù)器效 率。利用遠(yuǎn)程腳本調(diào)用技術(shù)(Remote Scripting),客戶端腳本可以像調(diào)用本地函數(shù)一樣調(diào)用遠(yuǎn)程腳本函數(shù),從而極大地 方便了交互式Web應(yīng)用的開(kāi)發(fā)。使得那些基于瀏覽器的應(yīng)用更接近于傳統(tǒng)的Win32應(yīng)用。在復(fù)雜的表單驗(yàn)證和頻繁的數(shù)據(jù)庫(kù) 操作中,應(yīng)用遠(yuǎn)程腳本調(diào)用技術(shù)的優(yōu)點(diǎn)是顯而易見(jiàn)的。 下面以一個(gè)示例來(lái)說(shuō)明。它的功能是:在客戶端輸入文字,然后調(diào)用服務(wù)器端腳本函數(shù),把SessionID與IP地址顯示給 用戶。 一、基本原理 遠(yuǎn)程腳本調(diào)用技術(shù)提供了一組接口函數(shù)。借助這組接口函數(shù),客戶端程序可以通過(guò)一個(gè)代理過(guò)程(一個(gè)Java Applet) 調(diào)用服務(wù)器端代碼。JavaApplet(RSProxy.class)在后臺(tái)工作,通常情況下用戶代碼并不需要直接操作它,它的配置也是 自動(dòng)完成的。遠(yuǎn)程腳本調(diào)用既可以是同步調(diào)用(調(diào)用命令發(fā)出后一直等待,直到服務(wù)器執(zhí)行函數(shù)結(jié)束后返回),也可以是 異步調(diào)用(函數(shù)調(diào)用后立即返回,調(diào)用時(shí)必須同時(shí)給出回調(diào)函數(shù))。一個(gè)遠(yuǎn)程腳本調(diào)用技術(shù)示例必須包含如下支持文件: RS.htm:包含客戶端支持代碼 RSProxy.class:這是一個(gè)Java Applet,實(shí)際完成客戶/服務(wù)器交互過(guò)程 RS.asp:服務(wù)器端支持代碼 (下載地址:http://msdn.microsoft.com/scripting/remotescripting/x86/rs10ben.exe) 使用遠(yuǎn)程腳本調(diào)用功能時(shí),客戶端和服務(wù)器端代碼都必須符合一定的要求。在服務(wù)器端,首先必須啟用遠(yuǎn)程腳本調(diào) 用:用#include包含RS.asp,并調(diào)用RSDispatch函數(shù)(參見(jiàn)sample.asp文件)。在服務(wù)器端實(shí)現(xiàn)遠(yuǎn)程腳本支持的關(guān)鍵在于 創(chuàng)建public_description對(duì)象。對(duì)于一個(gè)遠(yuǎn)程腳本調(diào)用客戶程序來(lái)說(shuō),ASP文件可以看成是一個(gè)通過(guò)public_description對(duì) 象提供遠(yuǎn)程方法的對(duì)象,ASP文件中的所有其它函數(shù)都是私有的。這種私有意味著,客戶程序只能對(duì)某些特定的函數(shù)實(shí)施遠(yuǎn) 程調(diào)用。應(yīng)當(dāng)避免寫全局性的ASP代碼(沒(méi)有封裝在函數(shù)中的代碼),遠(yuǎn)程調(diào)用時(shí)這些代碼是不會(huì)執(zhí)行的,因?yàn)檫h(yuǎn)程調(diào)用時(shí) 腳本執(zhí)行過(guò)程和普通ASP頁(yè)面執(zhí)行過(guò)程是不同的。把全局腳本代碼放入函數(shù)并顯式調(diào)用,可以確保它們被正確地執(zhí)行。 遠(yuǎn)程腳本調(diào)用技術(shù)要求服務(wù)器端的腳本必須用JavaScript編寫。本例聲明了一個(gè)Description類,該類包含一個(gè)公用的 sam1函數(shù),用new關(guān)鍵字創(chuàng)建Description,即public_description對(duì)象。 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〉 上面介紹了實(shí)現(xiàn)遠(yuǎn)程腳本調(diào)用對(duì)服務(wù)器端的要求,接下來(lái)我們看看遠(yuǎn)程調(diào)用功能對(duì)客戶端的要求。 客戶程序?qū)崿F(xiàn)遠(yuǎn)程調(diào)用之前必須先完成以下兩個(gè)任務(wù):首先,啟用遠(yuǎn)程腳本調(diào)用技術(shù)功能的Web頁(yè)面必須引用RS.htm;其 次,必須調(diào)用RSEnableRemoteScripting函數(shù)。RSEnableRemoteScripting函數(shù)允許在參數(shù)中指定RSProxy.class文件所在的 實(shí)際路徑,如果沒(méi)有指定這個(gè)參數(shù),則默認(rèn)RSProxy.class在_ScriptLibrary目錄下,如: <script language=″JavaScript″ src=″../rs.htm″> </script〉 <script language=″JavaScript″> RSEnableRemoteScripting(″..″); </script〉 二、調(diào)用遠(yuǎn)程腳本 完成上述準(zhǔn)備工作之后,就可以在客戶端代碼中調(diào)用服務(wù)器端函數(shù)了。遠(yuǎn)程調(diào)用用RSExecute方法實(shí)現(xiàn)。該方法接受的 參數(shù)包括服務(wù)器ASP頁(yè)面的URL、遠(yuǎn)程函數(shù)名字以及參數(shù)列表。RSExecute的調(diào)用結(jié)果是一個(gè)調(diào)用對(duì)象(Call Object)。調(diào) 用對(duì)象中包含了該次調(diào)用的返回值以及狀態(tài)信息,其主要屬性包括: id:該次調(diào)用的唯一標(biāo)識(shí)。 return_value:實(shí)際返回值,如果存在的話。 data:服務(wù)器響應(yīng)該次遠(yuǎn)程調(diào)用返回的原始數(shù)據(jù)。 status:標(biāo)識(shí)本次調(diào)用的狀態(tài),-1表示失敗,0表示完成。 message:有關(guān)本次調(diào)用的文本信息。如調(diào)用成功,為“Completed.”,否則,包含錯(cuò)誤說(shuō)明。 data屬性實(shí)際上是一個(gè)XML字符串。當(dāng)然,應(yīng)用遠(yuǎn)程腳本調(diào)用技術(shù)并不要求用戶懂得XML(也不要求用戶懂Java),這 里的XML文本是由服務(wù)器自動(dòng)生成的,遠(yuǎn)程腳本調(diào)用客戶端程序能自動(dòng)解析這些XML文本。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!