李 秋
江西現(xiàn)代職業(yè)技術(shù)學(xué)院 江西南昌 330095
當(dāng)客戶端第一次請(qǐng)求服務(wù)器端(例如用戶在瀏覽器中輸入某個(gè)ASP.NET AJAXASP.NET AJAX應(yīng)用程序的URL)時(shí),服務(wù)器端的ASP.NET頁(yè)面將初始的頁(yè)面UI以及行為發(fā)送給客戶端。
之后,客戶端和服務(wù)器端之間的通信將傳遞純粹的數(shù)據(jù)-——數(shù)據(jù)的生成和保存由服務(wù)器端業(yè)務(wù)層和數(shù)據(jù)層完成,數(shù)據(jù)的顯示方式以與用戶與數(shù)據(jù)之間的交互(包括修改、添加和刪除)則由客戶端表示層完成。至于客戶端與服務(wù)器端傳遞數(shù)據(jù)的實(shí)現(xiàn)過(guò)程,則正是我們本章探討的主題——-異步通信層來(lái)完成的。
簡(jiǎn)要了解ASP.NET AJAX中的異步通信層結(jié)構(gòu),以及客戶端和服務(wù)器端的通信過(guò)程之后,我們接下來(lái)更深入一步,分別探究ASP.NET AJAX中異步通信層的客戶端和服務(wù)器端的具體架構(gòu)。
ASP.NET AJAX異步通信層的客戶端部分包含了若干個(gè)javaScript組件,ASP.NET AJAX異步通信層的客戶端部分中,眾多的javaScript組件可以分為兩大類(lèi):核心通信組件以及支持組件。下面我們分別介紹。
(1)核心通信組件
核心通信組件是指實(shí)現(xiàn)與服務(wù)器端Web Service交互所必需的客戶端腳本組件。Web Service代理、頁(yè)面方式代理、webRequest組件、webRequestManager組件以及XMLHttp-Executor組件均屬于核心通信組件。
(2)Web Service代理
在ASP.NET AJAX中,Web Service的客戶端代理可以由服務(wù)器端的異步通信層自動(dòng)生成。然后開(kāi)發(fā)者即可在javaScript中通過(guò)這些Web Service代理非常直觀地對(duì)服務(wù)器端的WebService方式進(jìn)行異步調(diào)用。調(diào)用這類(lèi)代理的語(yǔ)法和服務(wù)器端代碼(例如C#或vb.net)的調(diào)用語(yǔ)法非常類(lèi)似——這也正是“代理”的含義。關(guān)于客戶端的WebService代理與普通的HTTP請(qǐng)求一樣,調(diào)用服務(wù)器端的Web Service方法也可以使用GET和POST兩種方式。
以GET方式進(jìn)行調(diào)用,那么需要為Web Method添加{scriptMethod(UsehttpGet=true)}屬性。
(3)頁(yè)面方式代理
與客戶端的Web Service代理類(lèi)似,ASP.NET AJAX異步通信層的服務(wù)器端部分同樣能夠?yàn)槎x在ASP.NET頁(yè)面中的靜態(tài)服務(wù)器端方法自動(dòng)生成客戶端的代理,因此也能夠大大簡(jiǎn)化在客戶端javaScript中的調(diào)用過(guò)程。
(4)WebRequest組件
*WebRequest組件是異步通信層中客戶端部分的“經(jīng)紀(jì)人”,用來(lái)收集發(fā)起異步HTTP請(qǐng)求所用到的參數(shù),例如請(qǐng)求地址、請(qǐng)求的主體部分、超時(shí)設(shè)定以及用戶上下文信息等。一般來(lái)講,WebRequest組件是我們使用ASP.NET AJAX異步通信層創(chuàng)建并發(fā)起一次 HTTP請(qǐng)求唯一需要打交道的客戶端組件。當(dāng)然,若是該HTTP請(qǐng)求的目標(biāo)是某個(gè)Web Service或某個(gè)ASP.NET頁(yè)面中的靜態(tài)方式,那么則毫無(wú)疑問(wèn)應(yīng)該選用主動(dòng)生成的Web Service或頁(yè)面方法的客戶端代理,這樣講會(huì)更加簡(jiǎn)單。
*XMLHttpExecutor組件
XMLHttpExecutor組件是異步通信層客戶端部分中最為“勞苦功高”的“實(shí)干者”,它將使用原始的XMLHttpRequest對(duì)象完成客戶端與服務(wù)器端的通信工作。此外,XMLHttpExecutor類(lèi)繼承于 WebRequest Executor基類(lèi),WebRequest Executor基類(lèi)為上層調(diào)用者提供了客戶端與服務(wù)器端通信工作的抽象,而XMLHttpExecutor只是WebRequestExecutor的一種實(shí)現(xiàn)。
*WebRequestManaget組件
WebRequestManaget組件是異步通信層客戶端部分中的“大管家”,用來(lái)維護(hù)并協(xié)調(diào)WebRequest組件與XMLHttpExecutor組件之間的關(guān)系,保證異步通信流程的順暢。
(5)支持組件
支持組件是指對(duì)WsbService或頁(yè)面方法代理進(jìn)行再次封裝的組件,包括身份驗(yàn)證代理和用戶個(gè)性化代理。實(shí)現(xiàn)客戶端/服務(wù)器端序例化/反序例化功能的組件也屬于支持組件,即JSON序例化組件。
身份驗(yàn)證代理組件是由服務(wù)器端驗(yàn)證服務(wù)自動(dòng)生成的。通過(guò)使用身份驗(yàn)證代理組件,即可在客戶端用JavaScript以異步回送,也就是Ajax的方式,實(shí)現(xiàn)用戶的登錄/注銷(xiāo)功能,而無(wú)需完成傳統(tǒng)方式中的一次整頁(yè)回送。
*用戶個(gè)性化代理
用戶個(gè)性化代理組件是由服務(wù)器端個(gè)性化服務(wù)自動(dòng)生成的。與身份驗(yàn)證代理組件的功能非常類(lèi)似,通過(guò)使用用戶個(gè)性化代理組件,即可在客戶端用JavaScript以異步回送的方式獲取/修改/更新用戶的個(gè)性化信息,同樣避免了傳統(tǒng)方式中的一次整頁(yè)回送。
*JSON序例化
JSON序例化組件能夠把需要發(fā)送給服務(wù)器端的數(shù)據(jù)序例化程JSON格式,還能夠?qū)⒎?wù)器端返回的JSON字符串解析程真正的JavaScript對(duì)象(使用JavaScript的eval()函數(shù))。
在ASP.NET開(kāi)發(fā)中需要使用異步通信來(lái)實(shí)現(xiàn)不同架構(gòu)之間的數(shù)據(jù)交互是非常必要的,可以使用Web Service代理、頁(yè)面方式代理等多種方式來(lái)完成。