專利名稱::Web應(yīng)用程序架構(gòu)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明針對提供基于網(wǎng)絡(luò)的應(yīng)用程序,尤其可應(yīng)用于提供基于因特網(wǎng)和Web的應(yīng)用程序。
背景技術(shù):
:由于基于因特網(wǎng)的應(yīng)用程序已變得更強(qiáng)大,對于開發(fā)者而言,保持無縫、響應(yīng)的用戶體驗已成為重要的特點?;赪eb的應(yīng)用程序通常包括服務(wù)器上所提供的一項或多項功能,這些功能使用運行于客戶計算機(jī)上的Web瀏覽器應(yīng)用程序來加以訪問。為了讓客戶機(jī)(web瀏覽器)和服務(wù)器按高速方式進(jìn)行通信,要求在它們之間有效率地運用通信協(xié)議——通常是HTTP。通常,通過從服務(wù)器接收頁和功能(通常采取諸如HTML等標(biāo)記語言的形式),web瀏覽器呈現(xiàn)對應(yīng)用程序或該應(yīng)用程序的功能組件的接口。在一些情況中,瀏覽器必須利用對關(guān)于位于服務(wù)器上的頁的請求的每個響應(yīng),來呈現(xiàn)所接收的數(shù)據(jù)的新的頁。用于提供這類信息的一個公共格式是“超文本傳輸協(xié)議”(HTTP)。通常,web瀏覽器將使用HTTP中的“GET”或“POST”命令來請求網(wǎng)頁;并且,呈現(xiàn)該頁所需要的所有信息都將被返回到web瀏覽器。即使用戶只是正在更新頁的一個部分,也可能幾次重復(fù)某些量的數(shù)據(jù)(例如,呈現(xiàn)頁所必需的信息)。雖然已開發(fā)技術(shù)來通過更新來自web瀏覽器的簡單數(shù)據(jù)請求而只更新頁的一些部分中的數(shù)據(jù),但是,這類協(xié)議還沒有完全靈活到可以允許開發(fā)者充分訪問基于web的應(yīng)用程序中可用的基礎(chǔ)方法。允許瀏覽器遠(yuǎn)程地對遠(yuǎn)程服務(wù)器上的類和對象進(jìn)行方法調(diào)用的客戶服務(wù)器協(xié)議的當(dāng)前例子包括“簡單對象訪問協(xié)議”(SOAP)和XML-RPC。SOAP和XML-RPC都要求客戶機(jī)理解傳輸數(shù)據(jù)類型。兩者都規(guī)定在XML中編碼參數(shù)并返回值,并且通過公共網(wǎng)絡(luò)協(xié)議來傳遞它們的標(biāo)準(zhǔn)方式。SOAP和XML-RPC主要用于服務(wù)器對服務(wù)器通信和厚客戶機(jī)(thickclient)對服務(wù)器通信。它們都是冗長的協(xié)議,不一定很有效率。特別是,SOAP要求客戶機(jī)上相對復(fù)雜的機(jī)制,以便理解從服務(wù)器接收的數(shù)據(jù)并使其對客戶機(jī)可用。用諸如JavaScript等簡單腳本語言難以實現(xiàn)這一點。在web瀏覽器中使用JavaScript的一個優(yōu)點是幾乎所有web瀏覽器應(yīng)用程序都包括允許它們執(zhí)行腳本的腳本引擎。使用web瀏覽器的腳本引擎在該架構(gòu)的客戶機(jī)一方要求較少的用戶化。因此,一種用于改善web瀏覽器與客戶機(jī)之間的通信以便啟動基于web的應(yīng)用程序的方法將會是有利的。
發(fā)明內(nèi)容揭示了一種用于第一臺計算機(jī)與第二臺計算機(jī)之間的通信的方法和協(xié)議、以及一種在客戶機(jī)-服務(wù)器環(huán)境中提供網(wǎng)絡(luò)化應(yīng)用程序的系統(tǒng)。在一個方面中,概略描述的本發(fā)明包括一種用于在客戶機(jī)-服務(wù)器環(huán)境中提供網(wǎng)絡(luò)化應(yīng)用程序的系統(tǒng)。在一個實施例中,該系統(tǒng)包括服務(wù)器上的應(yīng)用程序功能集,這些應(yīng)用程序功能包括數(shù)據(jù)類型定義;以及腳本環(huán)境中所定義的客戶機(jī)功能集。在獨特的方面中,這些客戶機(jī)功能被定義成包括與該應(yīng)用程序功能集中的每項應(yīng)用程序功能匹配的類型。在另一個實施例中,本發(fā)明是用于在因特網(wǎng)上提供web應(yīng)用程序的方法。該方法可以包括以下步驟提供包括服務(wù)器上的功能和對象的服務(wù)器環(huán)境,這些對象和功能具有定義的類型;生成包括腳本環(huán)境中的功能和對象的客戶機(jī)環(huán)境,該腳本環(huán)境中的功能和對象具有映射到服務(wù)器環(huán)境中對應(yīng)的功能和對象的類型;以及,向服務(wù)器提供客戶機(jī)環(huán)境。在又一個實施例中,本發(fā)明是一種用于初始化并安裝服務(wù)器和客戶機(jī)組件來提供基于web的應(yīng)用程序的系統(tǒng)。該系統(tǒng)包括具有擁有屬性的對象和方法的服務(wù)器應(yīng)用程序集。代碼生成器為每個所述對象和方法提供JavaScript客戶機(jī)方庫和服務(wù)器方庫。服務(wù)器方服務(wù)包括將數(shù)據(jù)從客戶機(jī)發(fā)送到服務(wù)器上對應(yīng)的對象和功能的分派器(dispatcher)和匯集器(marshaler)。在進(jìn)一步的實施例中,本發(fā)明是一種實現(xiàn)因特網(wǎng)應(yīng)用程序的系統(tǒng)。該系統(tǒng)包括服務(wù)器,該服務(wù)器包括各具有定義的類型的應(yīng)用程序?qū)ο蠛头椒?。還提供了創(chuàng)建調(diào)用所述對象和方法的腳本客戶集的生成引擎,每個腳本具有與所述應(yīng)用程序?qū)ο蠛头椒械闹辽僖粋€對象或方法匹配的類型定義。提供響應(yīng)引擎,以便從客戶處理設(shè)備上的一個或多個客戶腳本接收請求,并將所述請求發(fā)送到所述應(yīng)用程序?qū)ο蠛头椒ㄖ?。在另一個方面中,概略描述的本發(fā)明包括在操作于網(wǎng)絡(luò)上的各臺計算機(jī)之間不對稱地進(jìn)行操作的通信協(xié)議和方法。為數(shù)據(jù)效率以及服務(wù)器進(jìn)行的解釋而優(yōu)化從客戶機(jī)到服務(wù)器的通信。通過使用現(xiàn)存的客戶機(jī)應(yīng)用程序資源,為客戶機(jī)進(jìn)行的解釋而優(yōu)化從服務(wù)器到客戶機(jī)的通信。在一個實施例中,本發(fā)明是在分布式處理系統(tǒng)中的客戶機(jī)進(jìn)程與服務(wù)器進(jìn)程之間進(jìn)行通信的方法。該方法可以包括以下步驟通過該客戶機(jī)進(jìn)程向服務(wù)器發(fā)出功能請求,該功能請求包括具有由被請求的某一類型的服務(wù)器功能定義的格式的數(shù)據(jù)串;通過該服務(wù)器進(jìn)程接收功能調(diào)用并對該串執(zhí)行被請求的功能;以及,通過該服務(wù)器進(jìn)程發(fā)出對功能請求的響應(yīng),該響應(yīng)采用服務(wù)器對象定義的客戶機(jī)方處理格式。在另一個實施例中,本發(fā)明可以包括一種用于第一臺計算機(jī)與第二臺計算機(jī)之間的通信的協(xié)議。該協(xié)議包括從第一臺計算機(jī)到第二臺計算機(jī)的請求,該請求包括關(guān)于第二臺計算機(jī)上的功能的功能標(biāo)識符和關(guān)于該功能的自變量。該自變量可以由該功能標(biāo)識符所調(diào)用的功能的類型來定義。該協(xié)議也包括從第二臺計算機(jī)到第一臺計算機(jī)的答復(fù),該答復(fù)包括該功能的結(jié)果,該答復(fù)被定義為腳本輸入。在備選的實施例中,本發(fā)明是客戶機(jī)與服務(wù)器之間的通信方法。在這個實施例中,該方法可以包括以下步驟對請求中的數(shù)據(jù)進(jìn)行格式化,該請求包括根據(jù)服務(wù)器上的數(shù)據(jù)類型排序的參數(shù)串;在網(wǎng)絡(luò)上發(fā)送該請求中的數(shù)據(jù);以及,通過以腳本輸入響應(yīng)格式對響應(yīng)數(shù)據(jù)進(jìn)行格式化,來創(chuàng)建對數(shù)據(jù)的響應(yīng)。圖1描繪了適用于實施本發(fā)明的計算機(jī)硬件的框圖。圖2是流程圖,表現(xiàn)了根據(jù)本發(fā)明的一個方面的、用于創(chuàng)建服務(wù)器開發(fā)環(huán)境的客戶機(jī)方代理的本發(fā)明的通用方法。圖3是用于獲得在圖2中生成的代理環(huán)境的客戶機(jī)方方法。圖4是適用于實施本發(fā)明的架構(gòu)的系統(tǒng)的一個實施例的框圖。圖5是流程圖,表現(xiàn)了關(guān)于利用本發(fā)明的基礎(chǔ)架構(gòu)進(jìn)行操作的基于web的應(yīng)用程序的客戶機(jī)和服務(wù)器交互的一個實施例。圖6是服務(wù)器方對象定義與客戶機(jī)方代理對象定義之間的比較。圖7是與該方法關(guān)聯(lián)的服務(wù)器界面和對應(yīng)的JavaScript存根(stub)的第一個例子。圖8是利用用于實施本發(fā)明的方法的協(xié)議對服務(wù)器的客戶機(jī)請求和來自服務(wù)器的響應(yīng)的例子。圖9是服務(wù)器方界面和對應(yīng)的JavaScript存根的第二個例子。圖10是對應(yīng)的JavaScript存根中的服務(wù)器方界面的第三個例子。圖11是服務(wù)器方界面和對應(yīng)的JavaScript存根的第四個例子。圖12是根據(jù)本發(fā)明的響應(yīng)協(xié)議中的郵寄(post)的第二個例子。圖13是流程圖,展示了根據(jù)本發(fā)明的、供客戶機(jī)控制客戶機(jī)執(zhí)行的同步和異步代理調(diào)用的方法。具體實施例方式提供了一種用于在網(wǎng)絡(luò)化環(huán)境中實施基于web的應(yīng)用程序的獨特的架構(gòu)。該架構(gòu)為客戶機(jī)和服務(wù)器提供服務(wù)器上可用的編程接口、功能和對象的全集,并且最小化客戶機(jī)與服務(wù)器之間采用獨特的通信方法(被稱作“協(xié)議”)的數(shù)據(jù)通信。該通信方法被優(yōu)化成包括用于實施所提供的應(yīng)用程序的功能的數(shù)據(jù)。這里將按照其對于因特網(wǎng)上所提供的基于web的應(yīng)用程序的適用性來描述本發(fā)明。將會認(rèn)識到該架構(gòu)的適用性不局限于因特網(wǎng)——這里所描述的特定操作環(huán)境,也不局限于這里所描述的計算語言。將在“提供基于web的電子郵件服務(wù)、以及用于基于web的電子郵件服務(wù)內(nèi)的拼寫檢查功能,作為本發(fā)明的實施的一個實施例”的上下文中展示本發(fā)明。將會認(rèn)識到具有示范應(yīng)用程序和功能的架構(gòu)的特定舉例說明不限制可以使用本發(fā)明的架構(gòu)和協(xié)議來加以實施的應(yīng)用程序和功能的范圍。該架構(gòu)利用不對稱的獨特的郵寄(post)和響應(yīng)協(xié)議郵寄協(xié)議將非類型化的(non-typed)數(shù)據(jù)提供給服務(wù)器,而響應(yīng)協(xié)議包括采用類型化的(typed)和腳本格式的數(shù)據(jù)。提供自動生成的客戶機(jī)方庫,它們對應(yīng)于存在于服務(wù)器上的每個對象和方法。在另一個獨特的方面中,輕量級協(xié)議在客戶機(jī)與服務(wù)器之間移動數(shù)據(jù)。圖8和圖11示出該協(xié)議的例子。在獨特的方面中,客戶機(jī)對發(fā)送到服務(wù)器的數(shù)據(jù)類型化,并且,服務(wù)器安排數(shù)據(jù)所要求的處理。服務(wù)器以腳本發(fā)回響應(yīng),它“類型化的”,因為數(shù)據(jù)結(jié)構(gòu)是已知的。一般而言,用于初始化并安裝服務(wù)器方和客戶機(jī)方組件的進(jìn)程采用服務(wù)器上所開發(fā)的應(yīng)用程序——具有擁有屬性的類別和方法,并且創(chuàng)建客戶機(jī)環(huán)境和服務(wù)器環(huán)境。代碼生成器(這里被稱作“CodeGen”引擎或進(jìn)程)創(chuàng)建這里經(jīng)常被稱作“客戶機(jī)方代理”的JavaScript客戶機(jī)方庫對象和存根組件、以及關(guān)于所開發(fā)的應(yīng)用程序中的每個對象和組件的服務(wù)器方代碼“代理”。一旦創(chuàng)建這些環(huán)境,并且安裝客戶機(jī)環(huán)境,包括分派器和匯集器的服務(wù)器方服務(wù)就將數(shù)據(jù)從客戶機(jī)上的功能發(fā)送到服務(wù)器上對應(yīng)的對象和功能。將會理解這里將根據(jù)其使用JavaScript的應(yīng)用程序來描述本發(fā)明,但該架構(gòu)可以結(jié)合其他腳本環(huán)境。根據(jù)本發(fā)明,開發(fā)者在服務(wù)器上創(chuàng)建導(dǎo)致許多類和方法的應(yīng)用程序。當(dāng)編譯該應(yīng)用程序時,創(chuàng)建利用動態(tài)鏈接庫(DLL)或可執(zhí)行腳本對象(.exe文件)。在編譯該應(yīng)用程序之后,關(guān)于由開發(fā)者標(biāo)記用于輸出的對象和方法,CodeGen進(jìn)程為標(biāo)記的類創(chuàng)建JavaScript中的對象,并為標(biāo)記的方法創(chuàng)建JavaScript中的存根。這些JavaScript被封裝在web瀏覽器可以使用的一個或多個JavaScript文件中,并被傳送到與服務(wù)器連接的客戶機(jī),以實施基于web的應(yīng)用程序。CodeGen進(jìn)程也創(chuàng)建服務(wù)器方代理元素。在一個實施例中,CodeGen進(jìn)程創(chuàng)建運行于服務(wù)器上的C#代碼,具有服務(wù)器上的對象和功能到客戶機(jī)上的對象和存根的直接映射。CodeGen進(jìn)程也創(chuàng)建允許客戶機(jī)調(diào)用激活以服務(wù)器方組件的匯集器、分派器和代理。然后,為服務(wù)器使用而編譯這個服務(wù)器應(yīng)用程序代碼集。應(yīng)該注意,C#的使用也是示范性的??梢愿鶕?jù)本發(fā)明來利用任何面向?qū)ο缶幊陶Z言。一旦CodeGen進(jìn)程完成,就已創(chuàng)建與服務(wù)方庫相對應(yīng)的客戶機(jī)庫。設(shè)法調(diào)用位于服務(wù)器上的服務(wù)的客戶機(jī)開發(fā)者現(xiàn)在有能力按與服務(wù)器方開發(fā)者所采用的相同的方式來使用客戶機(jī)方組件。在這個方面中,服務(wù)器上可用的所有對象、協(xié)議、接口和API在客戶機(jī)上也可用。自動生成的客戶機(jī)和服務(wù)器代碼包含協(xié)議本身。當(dāng)客戶機(jī)調(diào)用本地客戶機(jī)庫中的方法時,執(zhí)行生成的本地JavaScript存根。作為“代理”,它與服務(wù)器元素的交互對于運行時間(runtime)而言是透明的。當(dāng)存根執(zhí)行時,應(yīng)用程序向功能中的服務(wù)器要求的任何數(shù)據(jù)將會導(dǎo)致請求被發(fā)送到服務(wù)器。匯集(收集)發(fā)送到服務(wù)器的請求中的數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)換成為特定的功能或?qū)ο笠?guī)定的格式。在此情況下,它被匯集成服務(wù)器上的匯集器(或在此情況下的“散集器”(de-marshaler))所理解的、被請求的對象或方法的類型所定義的傳輸格式。服務(wù)器上的匯集器和分派器獲得請求,不匯集(unmarshal)請求中的數(shù)據(jù),并將請求分派到實際的服務(wù)器方對象或方法。然后,服務(wù)方代碼根據(jù)駐留在組件中的請求和功能來創(chuàng)建響應(yīng),并按客戶機(jī)上的腳本庫可以解釋的響應(yīng)格式(例如,作為陣列或元素)將最后得到的數(shù)據(jù)傳回到客戶機(jī)。在客戶機(jī)上,自動生成的客戶機(jī)方JavaScript引擎不匯集(unmarshal)該響應(yīng),并將它退還給客戶機(jī)用于處理。在客戶機(jī)與服務(wù)器之間使用的協(xié)議基于HTTP協(xié)議,并使用諸如XMLHTTP等客戶機(jī)方對象來加以管理。XMLHTTP(可擴(kuò)展標(biāo)記語言超文本傳輸協(xié)議)是允許XML、HTML或二進(jìn)制數(shù)據(jù)使用HTTP而在因特網(wǎng)上被傳送至/從Web服務(wù)器的API集。XMLHTTP的優(yōu)點是當(dāng)從客戶機(jī)詢問是ASP或CGI程序的文件時,可以使用XMLHTTP,以便客戶機(jī)顯然地檢索最近的信息,而用戶不必重復(fù)地刷新瀏覽器。可以利用其他類型的對象來提供該服務(wù)。通過對利用關(guān)于要調(diào)用的方法的信息加以編碼的URL發(fā)出HTTP請求,客戶機(jī)調(diào)用服務(wù)器上的方法。URL在服務(wù)器方被解碼,以確保所請求的服務(wù)與該請求掛鉤,并且,調(diào)用要求方法的URL。URL本身編碼請求模式。完成響應(yīng)所必需的數(shù)據(jù)在該HTTP請求的主體中加以編碼??梢詫Ω鞣N處理系統(tǒng)執(zhí)行這里所描述的架構(gòu)和方法。圖1展示了適用于實施本發(fā)明的處理系統(tǒng)的例子。圖1展示了可以在其上實施本發(fā)明的合適的通用計算系統(tǒng)環(huán)境100的例子。計算系統(tǒng)環(huán)境100只是合適的計算環(huán)境的一個例子,它并不意在對本發(fā)明的使用范圍或功能性提出任何限制。也不應(yīng)該將計算環(huán)境100解釋為具有涉及示范操作環(huán)境100中所展示的任何一個部件或部件組合的任何依賴或要求。本發(fā)明可利用眾多其他的通用或?qū)S糜嬎阆到y(tǒng)環(huán)境或配置來操作??赡苓m用于本發(fā)明的眾所周知的計算系統(tǒng)、環(huán)境和/或配置的例子包括(但不局限于)個人計算機(jī)、服務(wù)器計算機(jī)、手持設(shè)備或便攜式設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程的消費電子產(chǎn)品、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等??梢栽谟捎嬎銠C(jī)執(zhí)行的計算機(jī)可執(zhí)行指令(例如,程序模塊)的一般上下文中描述本發(fā)明。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。也可以在分布式計算環(huán)境中實踐本發(fā)明,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲器存儲設(shè)備的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。參照圖1,用于執(zhí)行本發(fā)明的示范系統(tǒng)包括采取計算機(jī)110的形式的通用計算設(shè)備。計算機(jī)110的組件可以包括(但不局限于)處理單元120、系統(tǒng)存儲器130和系統(tǒng)總線121,系統(tǒng)總線121將包括該系統(tǒng)存儲器的各種系統(tǒng)組件耦合到處理單元120。系統(tǒng)總線121可以是幾種類型的總線結(jié)構(gòu)(包括存儲器總線或存儲器控制器、外圍總線、以及使用各種總線架構(gòu)中的任何總線架構(gòu)的局部總線)中的任何總線結(jié)構(gòu)。舉例來講(不作限制),這類架構(gòu)包括“工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)”(ISA)總線、“微通道結(jié)構(gòu)”(MCA)總線、“增強(qiáng)型ISA”(EISA)總線、“視頻電子標(biāo)準(zhǔn)協(xié)會”(VESA)局域總線和“外圍部件互連”(PCI)總線(也被稱作“夾層(Mezzanine)總線”)。計算機(jī)110通常包括各種計算機(jī)可讀介質(zhì)。計算機(jī)可讀介質(zhì)可以是可由計算機(jī)110存取的任何可用介質(zhì),它包括易失性和非易失性介質(zhì)、可移動和不可移動介質(zhì)。舉例來講(不作限制),計算機(jī)可讀介質(zhì)可以包括計算機(jī)存儲介質(zhì)和通信介質(zhì)。計算機(jī)存儲介質(zhì)包括易失性和非易失性的、可移動和不可移動介質(zhì),該介質(zhì)用關(guān)于信息(例如,計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù))存儲的任何方法或技術(shù)來加以實現(xiàn)。計算機(jī)存儲介質(zhì)包括(但不局限于)RAM、ROM、EEPROM、閃存或其他存儲技術(shù)、CD-ROM、數(shù)字通用盤(DVD)或其他光盤存儲器、盒式磁帶、磁帶、磁盤存儲器或其他磁存儲設(shè)備、或可以被用來存儲所需信息并可以由計算機(jī)110來進(jìn)行存取的其他任何介質(zhì)。通信介質(zhì)通常以調(diào)制數(shù)據(jù)信號(例如,載波或其他傳送機(jī)制)具體表現(xiàn)計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),它包括任何信息傳遞介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號”意味著一種信號,其一個或多個特征按為該信號中的信息編碼的這樣一種方式來加以設(shè)置或更改。舉例來講(不作限制),通信介質(zhì)包括有線介質(zhì)(例如,有線網(wǎng)絡(luò)或直線連接)和無線介質(zhì)(例如,聲音、RF、紅外線和其他無線介質(zhì))。以上任何內(nèi)容的組合也應(yīng)該被包括在計算機(jī)可讀介質(zhì)的范圍以內(nèi)。系統(tǒng)存儲器130包括采取易失性和/或非易失性存儲器(例如,只讀存儲器(ROM)131和隨機(jī)存取存儲器(RAM)132)的形式的計算機(jī)存儲介質(zhì)?;据斎?輸出系統(tǒng)133(BIOS)通常被存儲在ROM131中,該基本輸入/輸出系統(tǒng)包含有助于在計算機(jī)110內(nèi)的各個元件之間傳送信息(例如,在啟動期間)的基本例程。RAM132通常包含可立即由處理單元120存取并且/或者目前正由處理單元120進(jìn)行操作的數(shù)據(jù)和/或程序模塊。舉例來講(不作限制),圖1展示了操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù)137。計算機(jī)110也可以包括其他可移動/不可移動的、易失性/非易失性計算機(jī)存儲介質(zhì)。只舉例來講,圖1展示了從不可移動的非易失性磁介質(zhì)讀取或?qū)ζ鋵懭氲挠脖P驅(qū)動器140、從可移動的非易失性磁盤152讀取或?qū)ζ鋵懭氲拇疟P驅(qū)動器151,以及從可移動的非易失性光盤156(例如,CDROM或其他光學(xué)介質(zhì))讀取或?qū)ζ鋵懭氲墓獗P驅(qū)動器155??梢员挥糜谠撌痉恫僮鳝h(huán)境中的其他可移動/不可移動的易失性/非易失性計算機(jī)存儲介質(zhì)包括(但不局限于)卡型盒式磁帶機(jī)、快閃存儲卡、數(shù)字通用光盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動器141通常通過不可移動的存儲器接口(例如,接口140)而被連接到系統(tǒng)總線121,磁盤驅(qū)動器151和光盤驅(qū)動器155通常由可移動的存儲器接口(例如,接口150)連接到系統(tǒng)總線121。以上所討論的和圖1中所展示的這些驅(qū)動器及其關(guān)聯(lián)的計算機(jī)存儲介質(zhì)為計算機(jī)110提供計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的存儲。在圖1中,例如,硬盤驅(qū)動器141被展示為存儲操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146和程序數(shù)據(jù)147。注意,這些組件可以等同于或不同于操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù)137。這里為操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146和程序數(shù)據(jù)147提供不同的號碼,以展示它們至少是不同的副本。用戶可以通過輸入設(shè)備(例如,鍵盤162和通常被稱作“鼠標(biāo)”、“跟蹤球”或“觸墊”的定點設(shè)備161),來將命令和信息輸入計算機(jī)20。其他輸入設(shè)備(未示出)可以包括話筒、操縱桿、游戲墊、圓盤式衛(wèi)星電視天線、掃描儀或類似的輸入設(shè)備。這些和其他的輸入設(shè)備經(jīng)常通過被耦合到該系統(tǒng)總線的用戶輸入接口160而被連接到處理單元120,但也可能由其他接口和總線結(jié)構(gòu)(例如,并行端口、游戲端口或通用串行總線(USB))來加以連接。監(jiān)視器191或其他類型的顯示設(shè)備也經(jīng)由接口(例如,視頻接口190)而被連接到系統(tǒng)總線121。除該監(jiān)視器以外,計算機(jī)也可以包括其他外圍輸出設(shè)備(例如,揚聲器197和打印機(jī)196),這些外圍輸出設(shè)備可以通過輸出外圍接口190來加以連接。計算機(jī)110可以使用與一臺或多臺遠(yuǎn)程計算機(jī)(例如,遠(yuǎn)程計算機(jī)180)的邏輯連接而在網(wǎng)絡(luò)化環(huán)境中進(jìn)行操作。遠(yuǎn)程計算機(jī)180可能是個人計算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其他共同的網(wǎng)絡(luò)節(jié)點,它通常包括以上相對于計算機(jī)110而描述的許多或所有這些元件,盡管圖1中只展示了記憶存儲設(shè)備181。圖1中所描繪的這些邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但也可以包括其他網(wǎng)絡(luò)。這類網(wǎng)絡(luò)環(huán)境在辦公室、企業(yè)范圍的計算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中很普遍。當(dāng)被用于LAN網(wǎng)絡(luò)環(huán)境中時,計算機(jī)110通過網(wǎng)絡(luò)接口或適配器170而被連接到LAN171。當(dāng)被用于WAN網(wǎng)絡(luò)環(huán)境中時,計算機(jī)110通常包括調(diào)制解調(diào)器172或用于在WAN173(例如,因特網(wǎng))上建立通信的其他裝置。調(diào)制解調(diào)器172(可能是內(nèi)置的,也可能是外置的)可以經(jīng)由用戶輸入接口160或其他適當(dāng)?shù)臋C(jī)制而被連接到系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對于計算機(jī)110或其各個部分而描繪的程序模塊可以被存儲在該遠(yuǎn)程記憶存儲設(shè)備中。舉例來講(不作限制),圖1將遠(yuǎn)程應(yīng)用程序185展示為駐留在存儲設(shè)備181上。將會理解所示的這些網(wǎng)絡(luò)連接起示范的作用,可以使用在這些計算機(jī)之間建立通信鏈路的其他手段。為了實現(xiàn)利用本發(fā)明的架構(gòu)的應(yīng)用程序,必須安裝該架構(gòu)的客戶機(jī)和服務(wù)器方組件。圖2A表現(xiàn)了用于根據(jù)本發(fā)明來創(chuàng)建客戶機(jī)方環(huán)境的第一種方法。圖2B表現(xiàn)了該架構(gòu)的邏輯透視圖。在圖2A中,在步驟202中,web應(yīng)用程序的開發(fā)者將使用服務(wù)器上的工具來創(chuàng)建基于web的應(yīng)用程序。所創(chuàng)建的應(yīng)用程序?qū)ㄊ褂镁哂袑傩缘姆椒ê皖惖墓δ芎吞卣?。在一個實施例中,可以任何數(shù)量的應(yīng)用程序編程語言實行開發(fā)。在本例中,以C#編程語言實行開發(fā),它是被設(shè)計成與.NET平臺一起工作的、來自微軟的面向?qū)ο缶幊陶Z言。.NET平臺是關(guān)于在分布式計算環(huán)境中實施的web服務(wù)和web應(yīng)用程序的軟件平臺。一旦在步驟202中開發(fā)了應(yīng)用程序和特征,方法和類就存在于服務(wù)器上。在步驟204中,開發(fā)者可以將該開發(fā)者設(shè)法讓客戶機(jī)方應(yīng)用程序開發(fā)者可用的那些對象和方法標(biāo)記為可輸出。在一個實施例中,服務(wù)器方可用的所有方法都可以被標(biāo)記用于輸出。在步驟206中,編譯應(yīng)用程序,從而產(chǎn)生動態(tài)鏈接庫和可執(zhí)行文件。在編譯應(yīng)用程序之后,在步驟208中,代碼生成(CodeGen)進(jìn)程檢查已被創(chuàng)建的動態(tài)鏈接庫和可執(zhí)行文件,并且創(chuàng)建關(guān)于在步驟204中標(biāo)記的那些類的腳本對象、以及確切地映射到腳本存根和對象的要在服務(wù)器上運行的服務(wù)器代碼等價物。在一個實施例中,用JavaScript創(chuàng)建客戶對象,也可以使用其他腳本語言。本發(fā)明的一個獨特的方面是為客戶設(shè)備在諸如JavaScript等腳本環(huán)境中創(chuàng)建這類對象。腳本對象的運用允許客戶機(jī)上的web瀏覽器軟件中的本地腳本引擎的用戶實施這里所描述的架構(gòu)。在步驟210中,腳本類隨后被封裝在一個或多個文件中,再在步驟210中被傳送到客戶機(jī)。為應(yīng)用程序而開發(fā)的新功能可以創(chuàng)建新方法或新類。結(jié)果,該進(jìn)程可以返回到步驟202,以便當(dāng)開發(fā)新特征時,重復(fù)步驟204~210,從而將在服務(wù)器上實施的新特征傳遞到客戶機(jī)環(huán)境。圖2B展示了本發(fā)明的架構(gòu)的邏輯視圖。對于客戶設(shè)備上的用戶而言,環(huán)境是相對透明的。在客戶設(shè)備上,采取基于web的應(yīng)用程序的形式的終端用戶特征將暴露給該用戶。在一個例子中,這可以是諸如微軟Hotmail等基于web的電子郵件服務(wù),它包括電子郵件消息傳遞服務(wù)、日歷功能和聯(lián)系人功能212。通過使用服務(wù)器提供的數(shù)據(jù),內(nèi)容和腳本存根218提供客戶機(jī)方呈現(xiàn)(rendering)214??蛻魴C(jī)方和服務(wù)器方的HTTP處理器220處理客戶設(shè)備與服務(wù)器設(shè)備之間的通信。匯集器220和分派器224協(xié)調(diào)將請求從該HTTP處理器提供給CodeGen進(jìn)程創(chuàng)建的對象模型代碼226。例如,當(dāng)客戶機(jī)調(diào)用服務(wù)器上的拼寫檢查功能時,客戶界面實際上是采用腳本陣列的JavaScript功能??蛻魴C(jī)上的匯集進(jìn)程——由置入存根214的對象模型216實施——采用每個陣列(或元素或陣列或元素的組合)并將其建立為傳輸格式。通常,陣列采取用逗號分開的元素串的形式,其中,每個元素可以是陣列、整數(shù)串或某個其他的結(jié)構(gòu)。服務(wù)器上的匯集進(jìn)程是遞歸的,從而評估該陣列內(nèi)的元素。對象模型226和JavaScript對象模型216都是強(qiáng)類型化的,所以,為給定對象發(fā)送的陣列具有該陣列中定義明確的數(shù)量的元素,具有精確類型,并且,對于復(fù)合類型,具有復(fù)合類型的精確格式。該對象模型經(jīng)由數(shù)據(jù)層230和存儲管理器228來與實際數(shù)據(jù)232交互。由于根據(jù)服務(wù)器對象模型226來創(chuàng)建存根,因此,存根具有類型和屬性到數(shù)據(jù)層230的直接映射。為了在用戶系統(tǒng)上提供客戶機(jī)方環(huán)境,如上所述,一個或多個腳本文件需要被發(fā)送到客戶計算設(shè)備并被存儲在該設(shè)備上。利用基于web的應(yīng)用程序,通常由服務(wù)供應(yīng)者來提供這類應(yīng)用程序。使用本發(fā)明的基礎(chǔ)架構(gòu)來提供應(yīng)用程序的服務(wù)供應(yīng)者可以要求用戶創(chuàng)建登錄(log-in)或帳戶來訪問服務(wù),并且,可以使用登錄或帳戶創(chuàng)建步驟來安裝客戶機(jī)環(huán)境。在此情況下,服務(wù)供應(yīng)者可以被認(rèn)為是控制基于web的服務(wù)或應(yīng)用程序的供應(yīng)的人或計算機(jī)實施的進(jìn)程。在圖3中,用戶將在步驟300中創(chuàng)建帳戶或登錄。一旦用戶初始化登錄,用戶的第一經(jīng)驗將是將在步驟302中下載的應(yīng)用程序JavaScript文件下載到用戶的計算機(jī)。在步驟304中,當(dāng)用戶開始與應(yīng)用程序服務(wù)器提供的web服務(wù)交互時,腳本引擎使用用戶計算機(jī)上的對象來與服務(wù)器方應(yīng)用程序類和方法通信本發(fā)明的協(xié)議。將會理解對應(yīng)的進(jìn)程在服務(wù)器上運行,它從用戶那里接收關(guān)于特定服務(wù)或應(yīng)用程序的請求,并啟動關(guān)于該應(yīng)用程序的客戶機(jī)環(huán)境的下載進(jìn)程。圖4是適用于實施本發(fā)明的架構(gòu)和協(xié)議的一個系統(tǒng)的框圖。圖4表現(xiàn)了可以是圖1中所示的計算設(shè)備100的客戶設(shè)備460、以及應(yīng)用程序服務(wù)器420。如這里所使用的“服務(wù)器”或“網(wǎng)絡(luò)服務(wù)器”包括具有其上保存的數(shù)據(jù)和應(yīng)用程序或如圖4所示的標(biāo)注為480的塊的的任何機(jī)器或機(jī)器組合。在客戶機(jī)中執(zhí)行的瀏覽軟件300經(jīng)由網(wǎng)絡(luò)接口402與應(yīng)用程序服務(wù)器480進(jìn)行通信??梢栽诰W(wǎng)絡(luò)或諸如因特網(wǎng)等公用網(wǎng)和專用網(wǎng)的組合上經(jīng)由一個或多個請求402和響應(yīng)404進(jìn)行客戶設(shè)備460與服務(wù)器480之間的通信??蛻粼O(shè)備460與服務(wù)器480之間的通信通常使用HTTP協(xié)議,但本發(fā)明不局限于將HTTP用作傳輸協(xié)議??蛻粼O(shè)備480包括操縱響應(yīng)404的部分處理的傳輸組件410。當(dāng)返回內(nèi)容數(shù)據(jù)時,數(shù)據(jù)從傳輸組件410并通過其他代碼層420被傳遞到腳本引擎426和分析器/解釋器422。然后,分析器分析并解釋內(nèi)容,用于經(jīng)由用戶界面424向用戶顯示。分析器422可以按需要調(diào)用腳本引擎426,以解釋內(nèi)容參考中嵌入的任何腳本。內(nèi)容也可以被存儲在經(jīng)由存儲管理器455加以訪問的本地存儲器436中,存儲管理器455被包括在傳輸組件410內(nèi)或與傳輸組件410關(guān)聯(lián)。存儲器436也可以包括高速緩存表、數(shù)據(jù)高速緩存、cookies、以及包括上述JavaScript文件的JavaScript容器。傳輸組件410包括存儲管理器455或與存儲管理器455關(guān)聯(lián),存儲管理器455在例如cookie容器中存儲并檢索JavaScript和其他信息(例如,cookies)。腳本管理器450實施來自腳本引擎的請求,該腳本引擎執(zhí)行來自該架構(gòu)提供的客戶機(jī)方腳本的存根和對象。如下所述,腳本管理器450處理對服務(wù)器480的兩種類型的調(diào)用——針對服務(wù)器480上的功能和對象的同步調(diào)用和異步調(diào)用。以下根據(jù)圖13來描述這些請求。服務(wù)器480可以包括其中可實施本發(fā)明的合適的操作環(huán)境492。操作環(huán)境492只是合適的操作環(huán)境的一個例子,并不意在對本發(fā)明的使用范圍或功能性提出任何限制。操作環(huán)境的一個例子是可從微軟獲得的Windows系列操作系統(tǒng)。該環(huán)境可以包括作為包括設(shè)計和運行時間對象的平臺的應(yīng)用程序框架460、以及供web服務(wù)器上運行的應(yīng)用程序使用的控制器。雖然不要求框架,但是,這里所描述的某些服務(wù)可以被包括作為框架的組件,或者同樣可以被結(jié)合于操作系統(tǒng)中或被提供為在操作系統(tǒng)中運行的獨立的應(yīng)用程序。應(yīng)用程序框架可以是如上所述,例如為可從微軟公司獲得的.NET應(yīng)用程序框架。應(yīng)用程序框架可以包括資源類實施功能(例如,可以結(jié)合本發(fā)明利用的加密、壓縮和鑒定)。在應(yīng)用程序框架內(nèi)提供的是已開發(fā)的應(yīng)用程序內(nèi)容482、對象484和方法486。應(yīng)用程序489可以由一個或多個類和方法組成。編譯器487為應(yīng)用程序489創(chuàng)建動態(tài)鏈接庫和可執(zhí)行文件。在應(yīng)用程序框架460內(nèi)也示出CodeGen引擎495。如上所述,一旦對象和類為特定的應(yīng)用程序489而被創(chuàng)建并由計算機(jī)487編譯,CodeGen引擎495將創(chuàng)建客戶機(jī)方腳本對象兩者、匯集器494、分派器492和服務(wù)器應(yīng)用程序代碼490。利用服務(wù)器方對象來進(jìn)行服務(wù)器上的應(yīng)用程序中的方法與類之間的交互。將響應(yīng)提供給服務(wù)器方“代理”對象490,服務(wù)器方“代理”對象490隨后根據(jù)來自客戶機(jī)方代理的調(diào)用來提供對客戶設(shè)備的響應(yīng)。CodeGen引擎495通過稱作“反射”(reflection)的技術(shù)進(jìn)行操作,以分析軟件的編譯部分,來自動產(chǎn)生實施匯集、散集和分派的一套分析器、轉(zhuǎn)換器、格式化器和文本編寫器(共同稱作“存根”)。反射機(jī)制在應(yīng)用程序框架中被提供,并且是在運行時間發(fā)現(xiàn)類和對象定義的技術(shù)。實際上,CodeGen引擎是再編譯經(jīng)編譯的代碼的編譯器。CodeGen引擎考慮諸如其自己的條件等變量以及上下文信息。CodeGen的存根異步地分派功能,作為其自動生成的框架的一部分。它也能夠代理諸如Hashtables(散列表)等集合類型;這個特點在SOAP中不可用。最后,CodeGen能夠以無縫方式將服務(wù)器異常傳播給客戶機(jī)。最后得到的JavaScript存根將包括與服務(wù)器的應(yīng)用程序類和對象的運行時間屬性定義匹配的定義。一旦創(chuàng)建服務(wù)器應(yīng)用程序代碼490,該代碼就與服務(wù)器480上的存儲管理器455相互作用,以訪問數(shù)據(jù)498。來自客戶設(shè)備460的請求由匯集器494來接收,并由分派器492來分配。當(dāng)服務(wù)器480接收請求時,該分派器告訴服務(wù)器客戶機(jī)正在嘗試執(zhí)行什么功能。請求調(diào)用(invocationcall)被置入從客戶機(jī)接收的請求URL,作為請求404的一部分。在一個方面中,該URL包括.Net名字空間的表示。關(guān)于特定應(yīng)用程序的所有編程代碼出現(xiàn)在名字空間“application.namespace”中。分派器492切斷該信息。匯集器494分開URL的組件,檢查每個元素,并且,當(dāng)它匹配時,該分派器將請求中的信息委派給應(yīng)用程序代碼490中的那個相應(yīng)功能。圖5是流程圖,展示了運行于客戶機(jī)上的拼寫檢查應(yīng)用程序調(diào)用運行于服務(wù)器上的方法并從服務(wù)器接收響應(yīng)的一般進(jìn)程。通常,當(dāng)客戶機(jī)調(diào)用服務(wù)器上的拼寫檢查功能時,客戶機(jī)界面實際上是把腳本陣列作為輸入的腳本功能。腳本管理器包括采用每個陣列并將它建立成上游傳輸格式的匯集進(jìn)程。在一個實施例中,該格式是被視作花括號的陣列,其內(nèi)部元素的逗號分開列表。在圖5中,拼寫檢查功能通常將在步驟505中由某個用戶交互來起動。該用戶交互可以是對另一個應(yīng)用程序(例如,電子郵件應(yīng)用程序或文本編輯器)的專門調(diào)用,或者,當(dāng)用戶為電子郵件消息而按下“發(fā)送”指令時,可以自動調(diào)用該功能。在步驟510中,JavaScript應(yīng)用程序“檢查拼寫”將根據(jù)那里定義的功能來發(fā)出請求,該請求包括關(guān)于服務(wù)器方功能“檢查拼寫”的數(shù)據(jù)或?qū)傩浴T诓襟E515中,該數(shù)據(jù)被匯集成關(guān)于服務(wù)器上的“檢查拼寫”功能的類型化格式,并且,在步驟520中,XMLHTTP請求經(jīng)由傳輸組件被發(fā)送到服務(wù)器方方法。以下根據(jù)圖7-10來展示該請求的例子。在服務(wù)器方,請求將被散集并被轉(zhuǎn)換成類型化對象。對應(yīng)用服務(wù)器480執(zhí)行步驟525、530、535和540。在步驟525中,當(dāng)接收請求時,它將由匯集器494和分派器492來操作,以便在步驟525中將該對象分派到服務(wù)器上的特定功能。然后,所調(diào)用的方法將在步驟530中作用于請求數(shù)據(jù),并返回某個響應(yīng)。該響應(yīng)在步驟535中被轉(zhuǎn)換成JavaScript響應(yīng),并由應(yīng)用程序服務(wù)器代碼490以下游格式傳送到客戶機(jī)。服務(wù)器方代理將服務(wù)器方功能調(diào)用的結(jié)果變?yōu)镴avaScript,并且,腳本被發(fā)送回到客戶機(jī)并由腳本管理器解釋。腳本引擎仔細(xì)分析JavaScript響應(yīng)并評估它。按這個方式,“散集器”在客戶機(jī)上是不必要的——EVAL功能處理散集的等價物。在客戶機(jī)上執(zhí)行步驟545和550??蛻魴C(jī)方腳本一旦在步驟545中接收到響應(yīng),就將對響應(yīng)執(zhí)行EVAL操作。EVAL功能采用表示JavaScript表達(dá)式、聲明或聲明序列的串。該表達(dá)式可以包括現(xiàn)存對象的變量和特性。如果自變量表示表達(dá)式,那么,EVAL評估表達(dá)式。如果自變量表示一個或多個JavaScript聲明,那么,EVAL執(zhí)行這些聲明。在步驟550中,EVAL功能的輸出被發(fā)送到請求存根。圖6展示了關(guān)于類“消息消息頭部”的CodeGen進(jìn)程的輸出。該消息頭部類別可以包括電子郵件消息中提供的信息。如圖6所示,典型的電子郵件消息頭部可以包括主題、發(fā)件人地址、發(fā)件人姓名、日期、大小、消息鏈接和狀態(tài)圖標(biāo)。在服務(wù)器上創(chuàng)建C#對象定義620,同時,通過CodeGen(代碼生成)進(jìn)程為客戶機(jī)創(chuàng)建JavaScript對象定義610。該C#對象定義包括腳本構(gòu)造器624所遵循的關(guān)于對象的上述屬性的屬性說明622,腳本構(gòu)造器624定義這些字符串“subject=strSubject,fromAddr=strFromAddr,fromName=strFromName,date=dDate,size=iSize,msgLink=strMsgLink,thelcon=olcon”)。對應(yīng)的JavaScript對象定義包括從C#對象定義和功能定義到包含C#對象的服務(wù)器上的名字空間“serverNamespace”和消息頭部功能“messagehdr”的元素612。圖7展示了關(guān)于功能“GetMessages”的范例C#界面710及其關(guān)聯(lián)的javascript存根720的例子。功能GetMessages把以上定義的MessageHdr對象作為它的自變量。服務(wù)器方C#界面“getmessages”要求關(guān)于在服務(wù)器280上有郵箱的用戶的特定用戶的文件夾的定義輸入。客戶機(jī)方JavaScript存根720包括調(diào)用稱作“gXMLHTTPProxy”的對象的功能,它協(xié)調(diào)對服務(wù)器的異步和同步XMLHTTP請求。以下根據(jù)圖13來討論gXMLHTTPProxy的功能。在圖7的例子中,功能“GetMessages”是同步請求。如上所述,在表達(dá)對服務(wù)器的請求的過程中,腳本管理器255可以執(zhí)行同步或異步請求。在同步請求中,如以下進(jìn)一步詳述,客戶機(jī)將按十分類似于HTTP中的“POST”功能的方式作出反應(yīng)。也就是說,雖然客戶機(jī)將從服務(wù)器方方法請求一些數(shù)據(jù),但它將等待,保持應(yīng)用程序暫停,直到從服務(wù)器接收數(shù)據(jù)為止。在同步請求中,JavaScript調(diào)用服務(wù)器來檢索數(shù)據(jù),并在為web瀏覽器中的JavaScript提供結(jié)果之前等候服務(wù)器復(fù)原。該同步請求本質(zhì)上是阻止調(diào)用(blockingcall),其中,凍結(jié)瀏覽器,直到服務(wù)器復(fù)原為止。異步請求不立刻調(diào)用數(shù)據(jù)。異步請求被放置在隊列中,并且,請求通過XMLHTTP對象以非阻止調(diào)用發(fā)送到服務(wù)器。例如,如果請求在web瀏覽器中實施拼寫檢查功能,那么,可以繼續(xù)打出電子郵件,同時,在服務(wù)器上執(zhí)行該拼寫檢查功能。當(dāng)數(shù)據(jù)復(fù)原時,JavaScript拾取該調(diào)用并再次起動拼寫檢查功能。圖8展示了由GetMessages腳本和功能生成的請求810和響應(yīng)820的例子。上游請求采用按以下格式的URL的通用格式服務(wù)器+版本+服務(wù)器名字空間+classId+methodId。在圖8所示的例子中,POST操作包括關(guān)于給定文件夾F000000001的GetMessages功能的請求。對POST的響應(yīng)是包括MessageHdr的C#對象定義中所定義的元素的新陣列,這些元素被直接映射到腳本定義610。響應(yīng)例子820示出從應(yīng)用服務(wù)器中檢索到的MessageHDR對象的陣列。照此,客戶機(jī)上的腳本對象確切地知道響應(yīng)格式(它在此情況下是陣列,但可以包括其他格式),客戶機(jī)隨后可以分析在該陣列中接收到的數(shù)據(jù)并將其提供給客戶機(jī)上的任何呈現(xiàn)腳本,用于向客戶處理設(shè)備的用戶界面顯示。圖9和圖10展示了在應(yīng)用程序框架260中操作的CodeGen進(jìn)程290所創(chuàng)建的對象和功能的額外例子。圖9和圖10中的例子是關(guān)于可以在拼寫檢查應(yīng)用程序中利用的兩個拼寫檢查方法。圖9展示了功能“checkspellingofword”,它把單一的詞作為輸入,檢查其拼寫,并返回拼寫正確與否的指示。該功能返回真/假結(jié)果。腳本存根910展示了關(guān)于gXMLHTTP對象的同步調(diào)用“EXAMPLEInvokeSync”。結(jié)果,腳本910將在釋放客戶機(jī)上的應(yīng)用程序之前等候關(guān)于方法920的返回答案。圖10展示了把許多詞作為輸入并利用串響應(yīng)的界面“檢查拼寫”1010。腳本功能1020包括額外的過濾器——作為可以將調(diào)用匯集成協(xié)議格式的腳本的“dimensionFilterwords”。腳本1020是對gXMLHTTP對象的異步請求調(diào)用“EXAMPLEInvokeAsync”的例子。結(jié)果,腳本1020將排隊關(guān)于處理的請求并等候結(jié)果,而無須凍結(jié)瀏覽器腳本引擎。腳本1020也包括腳本提供回叫功能,從而允許gXMLHTTP代理等候正在運行的來自服務(wù)器的響應(yīng),同時,客戶機(jī)繼續(xù)執(zhí)行其他功能。圖11展示了另一種界面/存根關(guān)系。圖12表現(xiàn)了關(guān)于圖11所示的界面/存根關(guān)系的請求/響應(yīng)例子。在圖11中,關(guān)于功能“checkspellingwithsuggestions”的界面被示出并把句子(或句子序列)作為輸入,并且利用“suggestions”的串來響應(yīng)。gXMLHTTP對象的調(diào)用在這個例子中是異步的。圖12展示了關(guān)于圖11所示的checkspellingwithsuggestions功能的示范POST請求。以格式服務(wù)器+服務(wù)器名字空間+版本+classId+methodId再次提供POST功能,并且,在這個例子中,所定義的協(xié)議包括checkSpellingWithSuggestions功能可訪問的串定義。在包括兩個嵌套陣列的新陣列中提供響應(yīng)。該陣列是可以由客戶機(jī)上的JavaScript引擎和腳本環(huán)境解釋的標(biāo)準(zhǔn)JavaScript陣列。由于JavaScript功能檢查拼寫1120正在期待串陣列,該陣列可以被直接饋入腳本環(huán)境并由JavaScript虛擬機(jī)來操作。因此,從瀏覽器到服務(wù)器,協(xié)議被高度優(yōu)化用于傳輸。以強(qiáng)類型化格式提供對服務(wù)器方對象和方法的調(diào)用,因為客戶機(jī)方功能包括服務(wù)器對象的類型定義。數(shù)據(jù)用JavaScript被返回到客戶機(jī),并且,它可以用JavaScript語言由標(biāo)準(zhǔn)EVAL功能在客戶機(jī)方進(jìn)行EVAL。EVAL功能可以確定JavaScript是功能、陣列的創(chuàng)建、還是對象的創(chuàng)建,以便在評估進(jìn)程之后,它也成為JavaScript對象模型中的對象。圖13展示了控制對服務(wù)器的異步和同步XMLHTTP請求的gXMLHTTP對象。最初,在步驟1310中,進(jìn)程確定確切的瀏覽器配置以及瀏覽器是否適用于本發(fā)明的架構(gòu)中。在步驟1312中,初始化變量被傳遞到對象,該對象包括版本、服務(wù)器和名字空間標(biāo)識。XMLHTTP對象包括構(gòu)造器,該構(gòu)造器例示同步XMLHTTP功能、異步XMLHTTP功能、工作項目或請求塊的堆棧、使用中的當(dāng)前請求塊、定時器和cookie處理功能。在步驟1314中,方法嘗試使用瀏覽器的傳輸組件410的HTTP服務(wù)來例示關(guān)于HTTP通信的XMLHTTP代理。接下來,在步驟1315中,該方法根據(jù)調(diào)用腳本定義來調(diào)用同步或異步功能。如果該方法調(diào)用同步XMLHTTP請求,那么,調(diào)用XMLHTTP方法的腳本線程被暫停,并且直到XMLHTTP獲得成功或超時,才返回數(shù)據(jù)。在步驟1316中,同步XMLHTTP請求將通過生成對服務(wù)器的URL調(diào)用來開始——其例子在上面給出。一旦生成URL,在步驟1318中,打開同步連接,并且在步驟1320中將URL郵寄到服務(wù)器。隨后,該方法等候響應(yīng),該響應(yīng)可能是單一參數(shù)——responseText。一旦該響應(yīng)被接收或超時,它就被提供給調(diào)用腳本,并且在步驟1324中釋放腳本線程。其后,可以使用客戶機(jī)上的EVAL功能并根據(jù)前述說明來評估該響應(yīng)。在步驟1315中,如果請求是關(guān)于異步XMLHTTP請求,那么,在步驟1330中,同樣始于URL的生成。在此情況下,URL除了以上識別的組件以外還包括回叫功能?;亟惺窃谕瓿僧惒秸{(diào)用之后XMLHTTP代理調(diào)用的用戶提供的功能。它采用一個參數(shù)——XMLHTTP響應(yīng)文本。在生成URL之后,在步驟1334中,該系統(tǒng)使異步調(diào)用排隊并設(shè)置超時定時器1336。排隊步驟1334調(diào)用分派器功能,該分派器功能在步驟1338中確定服務(wù)器處是否有當(dāng)前執(zhí)行的塊。如果有,則該功能通過返回到步驟1336而返回到睡眠狀態(tài)。只要隊列堆棧不是空的,進(jìn)程中就有請求,并且,一旦它結(jié)束,那個請求將照料調(diào)用分派器。所以,當(dāng)它檢測到該堆棧已經(jīng)是空的時,只調(diào)用超時窗口。一旦塊在步驟1338中是空的,就打開異步連接,并在步驟1340中郵寄URL。一旦在步驟1342中排隊調(diào)用,就在1344處起動回叫處理程序。該回叫處理程序等候XMLHTTP操作完成,并且,執(zhí)行回叫。當(dāng)在1344處接收響應(yīng)時,從分派隊列1346中除去當(dāng)前的請求,并且,分派器在步驟1348中被設(shè)置成進(jìn)一步退出隊列。響應(yīng)在步驟1350中被傳遞到調(diào)用腳本。出于舉例說明和描述的目的,呈現(xiàn)了本發(fā)明的前述詳細(xì)說明。并不意在徹底詳盡或?qū)⒈景l(fā)明局限于所揭示的精確形式??梢园凑找陨辖虒?dǎo)進(jìn)行許多修改和變更。如這里指出的,在不脫離本發(fā)明的范圍和內(nèi)容的前提下,可能存在關(guān)于本發(fā)明的架構(gòu)的眾多變更。在一個實施例中,可以壓縮并加密請求和響應(yīng)。選擇所描述的實施例,以便最好地解釋本發(fā)明的原理及其實際應(yīng)用,從而允許本領(lǐng)域的其他技術(shù)人員最好地利用各個實施例中的和具有適合所預(yù)期的特定運用的各種修改的本發(fā)明。本發(fā)明的范圍意在由所附權(quán)利要求書來定義。權(quán)利要求1.一種用于在客戶機(jī)-服務(wù)器環(huán)境中提供網(wǎng)絡(luò)化應(yīng)用程序的系統(tǒng),其特征在于,包括所述服務(wù)器上的應(yīng)用程序功能集(489),所述應(yīng)用程序功能包括類型定義;以及定義腳本環(huán)境的客戶機(jī)功能集(436),所述客戶機(jī)功能被定義成包括與所述應(yīng)用程序功能集中的每項應(yīng)用程序功能匹配的類型。2.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括所述客戶機(jī)上的請求引擎(450),它處理從客戶機(jī)功能到服務(wù)器功能的請求。3.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述請求引擎(450)以與所請求的服務(wù)器功能的類型定義相對應(yīng)的客戶機(jī)功能的類型格式(404)提交請求。4.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述引擎響應(yīng)于請求客戶機(jī)功能(426、436),并且,所述類型定義被包含在所述客戶機(jī)功能中。5.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述請求引擎(450)包括處理同步和異步請求的調(diào)度器。6.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述請求引擎(450)包括從所述服務(wù)器功能接收響應(yīng)回叫的響應(yīng)監(jiān)聽器。7.如權(quán)利要求1所述的系統(tǒng),其特征在于,一個或多個類型定義(450)包括屬性集。8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述客戶機(jī)功能集(436)是用JavaScript(210)提供的。9.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括代碼(490),它提供對所述服務(wù)器上的客戶機(jī)請求的響應(yīng)。10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述代碼(490)以腳本可分析格式(406)提供所述響應(yīng)。11.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述代碼包括匯集器(494)。12.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述代碼包括分派器(492)。13.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括生成引擎(426),它從被明確標(biāo)記用于輸出的功能中創(chuàng)建客戶機(jī)方功能。14.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括生成引擎(426),它為所述服務(wù)器創(chuàng)建匯集器(494)。15.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括生成引擎(426),它為所述服務(wù)器創(chuàng)建分派器(492)。16.一種用于在因特網(wǎng)上提供web應(yīng)用程序的方法,其特征在于,包括提供(202)包括服務(wù)器上的功能和對象的服務(wù)器環(huán)境,所述對象和功能具有定義的類型;生成(208)包括腳本環(huán)境(426)中的功能和對象的客戶機(jī)環(huán)境,所述腳本環(huán)境中的功能和對象具有映射到所述服務(wù)器環(huán)境中對應(yīng)的功能和對象的類型;以及,為所述服務(wù)器提供(210)所述客戶機(jī)環(huán)境(426)。17.如權(quán)利要求16所述的方法,其特征在于,所述生成步驟包括用腳本語言輸出(210)所述功能和對象。18.一種實現(xiàn)因特網(wǎng)應(yīng)用程序的系統(tǒng),其特征在于,包括服務(wù)器(480),它包括各自具有定義類型的應(yīng)用程序?qū)ο?486)和方法(484)的集合;生成引擎(495),它創(chuàng)建調(diào)用所述對象和方法的客戶機(jī)腳本集,每個腳本具有與所述應(yīng)用程序?qū)ο蠛头椒ǖ募现械闹辽僖粋€對象或方法匹配的類型定義;以及,響應(yīng)引擎(494),它從客戶機(jī)處理設(shè)備上的一個或多個客戶機(jī)腳本接收請求,并將所述請求路由到所述應(yīng)用程序?qū)ο蠛头椒ㄖ弧?9.如權(quán)利要求18所述的系統(tǒng),其特征在于,每個客戶機(jī)腳本包括被映射到對應(yīng)的服務(wù)器對象或方法的定義的屬性(720)。20.如權(quán)利要求18所述的系統(tǒng),其特征在于所述生成引擎(495)是反射進(jìn)程。21.一種在分布式處理系統(tǒng)中的客戶機(jī)進(jìn)程與服務(wù)器進(jìn)程之間的通信方法,其特征在于,包括以下步驟(a)由所述客戶機(jī)進(jìn)程向所述服務(wù)器發(fā)出(520)功能請求,所述功能請求包括具有由所請求的服務(wù)器功能的類型所定義的格式的數(shù)據(jù)串;(b)由所述服務(wù)器進(jìn)程接收所述功能調(diào)用,并對所述串執(zhí)行(530)所請求的功能;以及(c)由所述服務(wù)器進(jìn)程發(fā)出(540)對所述功能請求的響應(yīng),所述響應(yīng)采用由所述對象定義的客戶機(jī)方處理格式。22.如權(quán)利要求21所述的通信方法,其特征在于,所述客戶機(jī)進(jìn)程包括與所請求的功能相對應(yīng)的類型定義(515)。23.如權(quán)利要求21所述的通信方法,其特征在于,所述發(fā)出和接收步驟是使用HTTP協(xié)議來執(zhí)行的。24.如權(quán)利要求23所述的通信方法,其特征在于,所述發(fā)出步驟(a)包括在URL(810、1210)中發(fā)出所述功能請求。25.如權(quán)利要求24所述的通信方法,其特征在于,所述發(fā)出步驟(a)包括生成包括功能標(biāo)識符的URL(810)。26.如權(quán)利要求24所述的通信方法,其特征在于,所述發(fā)出步驟(a)包括生成包括按所請求的功能的類型定義排序的以逗號分開的列表中的所述數(shù)據(jù)串的URL(1210)。27.如權(quán)利要求24所述的通信方法,其特征在于,所述URL(810)包含協(xié)議的版本號。28.如權(quán)利要求21所述的通信方法,其特征在于,所述發(fā)出步驟(c)包括用可以由腳本解釋的格式(820、1220)發(fā)出所述響應(yīng)。29.如權(quán)利要求28所述的通信方法,其特征在于,所述發(fā)出步驟(c)包括以JavaScript格式(710)發(fā)出所述響應(yīng)。30.如權(quán)利要求28所述的通信方法,其特征在于,所述發(fā)出步驟(c)包括在陣列(1220)中發(fā)出所述響應(yīng)。31.如權(quán)利要求28中所述的通信方法,其特征在于,所述發(fā)出步驟(c)包括在嵌套陣列(1220)中發(fā)出所述響應(yīng)。32.如權(quán)利要求28所述的通信方法,其特征在于,所述方法是對象(610)。33.如權(quán)利要求32所述的通信方法,其特征在于,所述方法是對象(620)中的一個對象。34.如權(quán)利要求32所述的通信方法,其特征在于,所述方法是陣列(620)的對象。35.如權(quán)利要求32所述的通信方法,其特征在于,原語數(shù)據(jù)類型(620)的對象。36.如權(quán)利要求28所述的通信方法,其特征在于,所述響應(yīng)是原語數(shù)據(jù)類型(620)。37.一種用于第一計算機(jī)與第二計算機(jī)之間的通信的協(xié)議,其特征在于,包括從所述第一計算機(jī)到所述第二計算機(jī)的請求(404、810),包括關(guān)于所述第二計算機(jī)上的功能的功能標(biāo)識符以及關(guān)于所述功能的自變量,所述自變量是由所述功能標(biāo)識符調(diào)用的功能的類型來定義的;以及包括所述功能的結(jié)果的從所述第二計算機(jī)到所述第一計算機(jī)的答復(fù)(406、820),所述答復(fù)被定義為腳本輸入。38.如權(quán)利要求37所述的協(xié)議,其特征在于,所述自變量(820)包括基于所述類型組織的數(shù)據(jù)。39.如權(quán)利要求37所述的協(xié)議,其特征在于,所述自變量(820)包括按所調(diào)用的功能的類型定義排序的逗號分開的列表中的數(shù)據(jù)串。40.如權(quán)利要求37所述的協(xié)議,其特征在于,所述腳本輸入(720)是JavaScript格式。全文摘要揭示了一種用于第一計算機(jī)與第二計算機(jī)之間的通信的方法和協(xié)議、以及在客戶機(jī)-服務(wù)器環(huán)境中提供網(wǎng)絡(luò)化應(yīng)用程序的系統(tǒng)。協(xié)議包括從第一計算機(jī)到第二計算機(jī)的請求,該請求包括關(guān)于第二計算機(jī)上的功能的功能標(biāo)識符以及關(guān)于該功能的自變量。該自變量可以由該功能標(biāo)識符調(diào)用的功能的類型來定義。協(xié)議也包括從第二計算機(jī)到第一計算機(jī)的、包括該功能的結(jié)果的答復(fù),該答復(fù)被定義為關(guān)于第一計算機(jī)的腳本輸入。在客戶機(jī)-服務(wù)器環(huán)境中提供網(wǎng)絡(luò)化應(yīng)用程序的系統(tǒng)包括服務(wù)器上的應(yīng)用程序功能集,這些應(yīng)用程序功能包括數(shù)據(jù)類型定義;以及定義腳本環(huán)境的客戶機(jī)功能集。這些客戶機(jī)功能被定義成包括與服務(wù)器上的每項應(yīng)用程序功能匹配的類型。文檔編號H04L29/06GK1809068SQ200610002508公開日2006年7月26日申請日期2006年1月4日優(yōu)先權(quán)日2005年1月4日發(fā)明者A·班索德,黃振裕,W·C·胡蘇申請人:微軟公司