青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

twzheng's cppblog

『站在風(fēng)口浪尖緊握住鼠標(biāo)旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評(píng)論 :: 0 Trackbacks

摘自:《.NET for Flash動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)手札》   作者:張亞飛   電子工業(yè)出版社



17.1  應(yīng)用Flash Remoting MX構(gòu)建的Flash影片
應(yīng)用程序架構(gòu)

         應(yīng)用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序和其他“客戶端/服務(wù)器”應(yīng)用程序極為相似(包括基于瀏覽器的網(wǎng)絡(luò)應(yīng)用程序,所以我們不時(shí)使用“客戶端/服務(wù)器”這樣的術(shù)語(yǔ))。例如,F(xiàn)lash影片應(yīng)用程序一般位于一個(gè)瀏覽器窗口中,嵌入在一個(gè)HTML頁(yè)內(nèi),實(shí)際上也是作為HTML頁(yè)內(nèi)的一個(gè)動(dòng)態(tài)元素。

         另外,F(xiàn)lash影片應(yīng)用程序中“控件(組件)”可以用來(lái)顯示文本和圖形,用戶還可以鍵入文字信息并和遠(yuǎn)程服務(wù)器進(jìn)行通信,從這一點(diǎn)上來(lái)說(shuō)非常像HTML頁(yè)。

         Flash影片應(yīng)用程序也可以創(chuàng)建服務(wù)端方法,請(qǐng)求調(diào)用遠(yuǎn)程服務(wù),服務(wù)端方法調(diào)用由客戶端發(fā)起,一般是一個(gè)異步事件:Flash影片應(yīng)用程序請(qǐng)求調(diào)用遠(yuǎn)程服務(wù),遠(yuǎn)程服務(wù)端處理請(qǐng)求,返回結(jié)果;作為宿主的Flash Player不會(huì)等待這一結(jié)果返回,但是當(dāng)結(jié)果返回時(shí)會(huì)處理該結(jié)果。

17.1.1  理解Flash Remoting MX開(kāi)發(fā)環(huán)境架構(gòu)

因?yàn)镕lash Remoting MX連接兩個(gè)截然不同、相互獨(dú)立的運(yùn)行時(shí)環(huán)境,所以在使用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序時(shí)就必須使用兩種開(kāi)發(fā)語(yǔ)言:ActionScript和應(yīng)用服務(wù)器使用的開(kāi)發(fā)語(yǔ)言。因此,使用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序至少要求有兩個(gè)不同開(kāi)發(fā)環(huán)境的知識(shí)。

Flash可以用來(lái)創(chuàng)建使用Flash Remoting MX的Flash影片應(yīng)用程序:

l         可以使用Flash來(lái)設(shè)計(jì)用戶界面

l         可以使用Flash編寫(xiě)客戶端ActionScript腳本代碼

應(yīng)用服務(wù)器有很多種,使用的開(kāi)發(fā)語(yǔ)言也很多:ColdFusion使用ColdFusion開(kāi)發(fā)語(yǔ)言;Java就是使用Java語(yǔ)言;.NET則支持的語(yǔ)言很多,包括VB、C#等。開(kāi)發(fā)工具也多種多樣,你可以使用文本編輯器也可以選擇集成開(kāi)發(fā)環(huán)境(IDE)。集成開(kāi)發(fā)環(huán)境一般支持相關(guān)的程序語(yǔ)言及其API。Dreamweaver是一個(gè)不錯(cuò)的IDE,它支持ColdFusion、JSP和ASP.NET。本書(shū)主要是使用VB.NET開(kāi)發(fā)的ASP.NET作為應(yīng)用服務(wù)器技術(shù)。

因?yàn)榭蛻舳撕头?wù)端環(huán)境相互獨(dú)立,所以在使用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序時(shí),可以把它作為一個(gè)工程組。一般而言,一個(gè)網(wǎng)絡(luò)應(yīng)用程序需要設(shè)計(jì)人員和開(kāi)發(fā)人員協(xié)同工作。設(shè)計(jì)人員創(chuàng)建用戶界面,開(kāi)發(fā)人員編寫(xiě)客戶端ActionScript腳本代碼和應(yīng)用服務(wù)器邏輯。

在使用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序時(shí),把服務(wù)端開(kāi)發(fā)、客戶端開(kāi)發(fā)和客戶端設(shè)計(jì)明確地組織起來(lái),定義好各自的角色是非常重要的。從工作分工而言,客戶端設(shè)計(jì)人員創(chuàng)建Flash影片應(yīng)用程序用戶界面,工作包括頁(yè)面布局、動(dòng)畫(huà)、效果等;客戶端開(kāi)發(fā)人員編寫(xiě)ActionScript腳本代碼連接到遠(yuǎn)程服務(wù),并處理結(jié)果;最后,服務(wù)端開(kāi)發(fā)人員在應(yīng)用服務(wù)器上創(chuàng)建業(yè)務(wù)邏輯作為遠(yuǎn)程服務(wù)。

這是應(yīng)用Flash Remoting MX技術(shù)開(kāi)發(fā)Flash影片應(yīng)用程序工程的架構(gòu)設(shè)計(jì)模式,下面我們就來(lái)了解一下Flash Remoting MX的設(shè)計(jì)模式。


17.1.2  使用Flash Remoting MX設(shè)計(jì)模式

Flash Remoting MX技術(shù)被設(shè)計(jì)成可以和選定的(現(xiàn)有的)設(shè)計(jì)模式及框架集成在一起,這正是它的特點(diǎn),用戶也可以由此降低成本。對(duì)于Flash影片應(yīng)用程序和.NET這兩個(gè)現(xiàn)有的運(yùn)行框架而言,F(xiàn)lash Remoting MX在中間執(zhí)行的是一個(gè)非常有效率的結(jié)構(gòu)化設(shè)計(jì)模式。除了可以提高開(kāi)發(fā)效率、減少由于設(shè)計(jì)方面的欠缺導(dǎo)致的誤解外,該模式可以用來(lái)強(qiáng)制檢查“客戶端/服務(wù)器”之間的交互,提高應(yīng)用程序的性能和穩(wěn)定性。

1.Model-View-Controller設(shè)計(jì)模式

現(xiàn)今,用戶界面向?qū)偷膽?yīng)用程序風(fēng)靡世界,程序軟件開(kāi)發(fā)一般使用Model-View- Controller(MVC)方式,這種方式根據(jù)用途組織應(yīng)用程序代碼。在使用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序時(shí),就是使用的這種方式。

MVC程序軟件開(kāi)發(fā)方式包含下面的幾個(gè)元素:

(1)Model。Model(模型)代表應(yīng)用程序數(shù)據(jù)和數(shù)據(jù)的處理,以及其他的邏輯。在一個(gè)網(wǎng)絡(luò)應(yīng)用程序中,就是應(yīng)用服務(wù)器程序和數(shù)據(jù)庫(kù)。

(2)View。View(查看)代表用戶界面,一般包含用戶控制和信息顯示(動(dòng)態(tài)的和靜態(tài)的)兩個(gè)元素。

(3)Controller。Controller(控制)代表著處理用戶輸入,根據(jù)輸入改變模型然后查看的邏輯。根據(jù)應(yīng)用程序設(shè)計(jì)的不同,Controller 可以位于客戶端也可以位于服務(wù)端,或者兩者結(jié)合起來(lái)。為了將網(wǎng)絡(luò)信息交換減少到最小,充分利用Flash Player運(yùn)行時(shí),一般應(yīng)當(dāng)在Flash影片應(yīng)用程序中完成Controller。

如圖17-1所示揭示了Flash Remoting MX環(huán)境應(yīng)用中的MVC架構(gòu)。

圖17-1  Flash Remoting MX環(huán)境應(yīng)用中的MVC架構(gòu)

在圖17-1中,F(xiàn)lash Remoting MX使得controller和model相互分離,它實(shí)際是在Flash影片應(yīng)用程序和應(yīng)用服務(wù)器(或者Web Service)之間起到一個(gè)通信通道的作用。

2.其他的Flash Remoting MX設(shè)計(jì)模式

除前面介紹的模式外,也有其他的設(shè)計(jì)模式,主要是為了減少遠(yuǎn)程服務(wù)方法調(diào)用,例如value object模式。Flash Remoting MX能從一個(gè)遠(yuǎn)程服務(wù)返回結(jié)果,并將結(jié)果作為一個(gè)ActionScript對(duì)象。ActionScript對(duì)象可以用來(lái)打包遠(yuǎn)程服務(wù)數(shù)據(jù),僅返回一個(gè)對(duì)象給Flash影片應(yīng)用程序,這樣就避免了無(wú)數(shù)的、頻繁的單個(gè)調(diào)用。

為了簡(jiǎn)化遠(yuǎn)程服務(wù)API以適用于Flash影片應(yīng)用程序,你可以使用facade設(shè)計(jì)模式,這種模式在Flash影片應(yīng)用程序和遠(yuǎn)程服務(wù)之間提供一個(gè)緩沖層。facade設(shè)計(jì)模式規(guī)定了一個(gè)服務(wù)端應(yīng)用程序經(jīng)紀(jì)人,用來(lái)接收Flash影片應(yīng)用程序遠(yuǎn)程調(diào)用,并傳遞方法到相應(yīng)的服務(wù)器資源。這就給了你更多的適應(yīng)性:你可以改變遠(yuǎn)程服務(wù)架構(gòu),而不需改變Flash影片應(yīng)用程序。

如圖17-2所示揭示了Flash Remoting MX環(huán)境應(yīng)用中的facade設(shè)計(jì)模式。

圖17-2  Flash Remoting MX環(huán)境應(yīng)用中的facade設(shè)計(jì)模式

ColdFusion組件、JavaBeans,以及.NET 程序集都可以用做facade。它們都可以接收所有來(lái)自Flash影片應(yīng)用程序的功能請(qǐng)求,并將這些請(qǐng)求分配給相應(yīng)的應(yīng)用服務(wù)器資源或者根據(jù)請(qǐng)求進(jìn)行網(wǎng)絡(luò)服務(wù)調(diào)用,在本書(shū)前面的章節(jié)已經(jīng)為您詳細(xì)地介紹過(guò)怎樣使用Flash Remoting MX從Flash影片應(yīng)用程序調(diào)用.NET程序集了。


17.1.3  理解Flash Remoting MX for .NET 目錄結(jié)構(gòu)

要為應(yīng)用Flash Remoting MX技術(shù)而使用一個(gè)ASP.NET應(yīng)用程序,必須將Flash Remoting MX程序集(FlashGateway.dll)放置在應(yīng)用程序的本地程序集緩存中(bin目錄下),并在應(yīng)用程序的 web.config文件中注冊(cè)該程序集。在最簡(jiǎn)單的ASP.NET表單應(yīng)用程序中,ASP.NET應(yīng)用程序的目錄結(jié)構(gòu)如圖17-3所示。

圖17-3  ASP.NET應(yīng)用程序的目錄結(jié)構(gòu)

如圖17-3所示,在我們前面介紹的helloWorld例子中,3JK目錄中的本地程序集緩存包含有Flash Remoting MX程序集(flashgateway.dll)。要使Flash影片應(yīng)用程序連接到一個(gè)遠(yuǎn)程服務(wù),必須引用Web根目錄下應(yīng)用程序目錄中的物理資源。

Flash Remoting MX自動(dòng)安裝了一個(gè)名為gateway.aspx的空ASPX文件,但是你也可以使用應(yīng)用程序目錄中的任何ASPX文件,在這里我們使用了默認(rèn)的gateway.aspx。

web.config文件包含有flashgateway.dll程序集的注冊(cè)信息。HttpModule配置模塊可以處理對(duì)ASP.NET資源的所有Web請(qǐng)求。所以我們要在web.config文件中添加下面的一段配置語(yǔ)句:

<httpModules>

<add name="GatewayController" type=

             "FlashGateway.Controller.GatewayController,flashgateway" />

</httpModules>

如果對(duì)服務(wù)端方法的請(qǐng)求中包含著AMF信息,F(xiàn)lash Remoting MX就會(huì)解釋AMF信息并使請(qǐng)求繼續(xù)下去。

技巧與提示

注意,在安裝Flash Remoting MX for .NET時(shí),會(huì)在Web根目錄下創(chuàng)建一個(gè)名為flashremoting的目錄。在該目錄下,你可以發(fā)現(xiàn)一個(gè)本地程序集緩存(bin目錄),以及一個(gè)Samples目錄,該目錄下存放了Flash影片應(yīng)用程序的例子。

17.2  深入Flash Remoting MX網(wǎng)關(guān)和服務(wù)適配器

Flash Remoting MX將進(jìn)入的請(qǐng)求映射到對(duì)應(yīng)的服務(wù)適配器,這就可以直接連接到一個(gè)特定的應(yīng)用服務(wù)器。

當(dāng)一個(gè)HTTP請(qǐng)求到達(dá)服務(wù)器時(shí),它包含了AMF信息,F(xiàn)lash Remoting MX根據(jù)名稱(chēng)將該請(qǐng)求映射到對(duì)應(yīng)的服務(wù)適配器。要避免名稱(chēng)沖突,可以在ActionScript腳本代碼中定義目錄結(jié)構(gòu)、充分授權(quán)的類(lèi)名或包名,或者是描述Web服務(wù)的WSDL URL地址。


17.2.1  應(yīng)用Flash Remoting MX for .NET

Flash Remoting MX將ASP.NET技術(shù)作為Flash影片應(yīng)用程序的一個(gè)遠(yuǎn)程服務(wù),因而可以被當(dāng)作ActionScript的一項(xiàng)功能,這樣就能被Flash影片應(yīng)用程序識(shí)別。

能夠作為遠(yuǎn)程服務(wù)的Microsoft.NET技術(shù)有很多,包括ASP.NET網(wǎng)頁(yè)、Web服務(wù)、程序集方法。Flash開(kāi)發(fā)人員編寫(xiě)ActionScript腳本代碼可以使用一個(gè)稱(chēng)為NetServices或Service的功能類(lèi)庫(kù)連接到一個(gè)遠(yuǎn)程.NET服務(wù)器,或者引用一個(gè)遠(yuǎn)程服務(wù),調(diào)用遠(yuǎn)程服務(wù)的功能。

為了通過(guò)HTTP傳輸信息, Flash Remoting MX使用一個(gè)稱(chēng)為Action Message Format (AMF)的二進(jìn)制信息格式,它模擬了Web服務(wù)執(zhí)行時(shí)使用的Simple Object Access Protocol (SOAP)協(xié)議。它允許使用HTTP在Internet上發(fā)送各種數(shù)據(jù)類(lèi)型,包括記錄集和其他的原始數(shù)據(jù)類(lèi)型(如整數(shù)、字符串、XML文檔和日期等)。

Flash Remoting MX網(wǎng)關(guān)是ASP.NET運(yùn)行時(shí)的一個(gè)前端控件,它處理從ActionScript到.NET Common Language Runtime (CLR)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換。在網(wǎng)關(guān)收到服務(wù)請(qǐng)求之前,該請(qǐng)求必須先通過(guò)過(guò)濾裝置處理串行數(shù)據(jù)、日志和安全檢驗(yàn),最后到達(dá)一個(gè)服務(wù)適配器,服務(wù)適配器被用來(lái)處理服務(wù)和啟動(dòng)類(lèi)型。

對(duì)于Microsoft.NET技術(shù),F(xiàn)lash Remoting MX包含四個(gè)服務(wù)適配器:

l         ASP.NET適配器

l         ADO.NET數(shù)據(jù)綁定適配器

l         Web服務(wù)適配器

l         程序集適配器(*.dll)

Flash Remoting MX for .NET要求安裝.NET Framework SDK,要檢查是否安裝了.NET Framework SDK,可打開(kāi)Windows控制面板,雙擊“添加/刪除應(yīng)用程序”選項(xiàng),查看有沒(méi)有Microsoft.NET Framework SDK。如果沒(méi)有看到,就要下載一個(gè)安裝上。(下載地址http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml)

Flash Remoting MX怎樣融入Microsoft.NET框架

當(dāng)Flash影片應(yīng)用程序和Flash Remoting MX服務(wù)器控件被嵌入在ASPX網(wǎng)頁(yè)中時(shí),使用Flash Remoting MX的Flash影片應(yīng)用程序就成為 .NET應(yīng)用程序中客戶端內(nèi)容中的一部分。Flash Remoting MX在 ASP.NET網(wǎng)頁(yè)和.NET網(wǎng)絡(luò)表單應(yīng)用程序中可以用做一個(gè)自定義服務(wù)器控件,或者也可以在一個(gè).NET 程序集(DLL)文件中用做一個(gè)命名空間,還可以用在一個(gè)代碼隱藏類(lèi)文件和Web服務(wù)中。一個(gè) .NET 程序集(flashgateway.dll)位于ASP.NET應(yīng)用程序本地程序集緩存中,它提供了Flash Remoting MX的功能。



17.2.2  關(guān)于AMF

如果您對(duì)生物學(xué)非常熟悉的話,有可能知道AMF,它是一種極其罕見(jiàn)的植物名,名為叢枝內(nèi)生菌根菌,是菌根菌的一種。絕大部分植物都能從陽(yáng)光中獲取賴以生存的食物,但是菌根菌靠吸取寄生植物的勞動(dòng)果實(shí)成活。

在Flash Remoting MX中,AMF正是這樣一種事物,只不過(guò)它是一種信息編碼格式。它本身并不產(chǎn)生信息數(shù)據(jù),而是對(duì)通過(guò)HTTP在Flash影片應(yīng)用程序和遠(yuǎn)程服務(wù)之間傳遞的數(shù)據(jù)進(jìn)行編碼和解碼來(lái)產(chǎn)生信息數(shù)據(jù)。

由于AMF是專(zhuān)為ActionScript對(duì)象模型設(shè)計(jì)的信息編碼格式,所以對(duì)于使用Flash Remoting MX的Flash影片應(yīng)用程序來(lái)說(shuō)非常高效。

AMF的全稱(chēng)是Action Message Format,它采用二進(jìn)制格式,專(zhuān)為ActionScript對(duì)象模型設(shè)計(jì),要從遠(yuǎn)程服務(wù)發(fā)送和接收信息,F(xiàn)lash Remoting MX就使用Action Message Format。使用AMF,F(xiàn)lash Remoting MX可以編碼和解碼通過(guò)HTTP在Flash影片應(yīng)用程序和遠(yuǎn)程服務(wù)之間傳遞的數(shù)據(jù)。

AMF符合Simple Object Access Protocol(SOAP)協(xié)議格式,它使用信息包格式分段傳送信息。一個(gè)AMF信息包包含下面5個(gè)部分:

l         信息包頭,這一部分包含了AMF版本信息

l         上下關(guān)系頭計(jì)數(shù)

l         上下關(guān)系頭配置。上下關(guān)系頭包含了一個(gè)一個(gè)獨(dú)立的AMF信息應(yīng)當(dāng)怎樣被處理的描述信息

l         信息計(jì)數(shù)

l         信息配置

在客戶端,服務(wù)端的方法請(qǐng)求被使用NetServices類(lèi)或Service類(lèi)的方法自動(dòng)序列化為AMF格式;在服務(wù)端,F(xiàn)lash Remoting MX逆序列化AMF信息。當(dāng)服務(wù)端處理完成時(shí),結(jié)果又被序列化為AMF格式,并發(fā)回Flash影片應(yīng)用程序。服務(wù)端創(chuàng)建的AMF信息格式與客戶端創(chuàng)建的AMF信息格式相同。單獨(dú)的AMF信息包主體內(nèi),包含了錯(cuò)誤或響應(yīng)對(duì)象,它們被表述成一個(gè)ActionScript對(duì)象。



17.2.3  Flash Remoting MX和數(shù)據(jù)類(lèi)型

當(dāng)應(yīng)用Flash Remoting MX技術(shù),從Flash影片應(yīng)用程序向應(yīng)用服務(wù)器發(fā)送數(shù)據(jù)和應(yīng)用服務(wù)器返回?cái)?shù)據(jù)給Flash影片應(yīng)用程序時(shí),數(shù)據(jù)被進(jìn)行了兩次轉(zhuǎn)換:

(1)在客戶端的Flash影片應(yīng)用程序中,在ActionScript數(shù)據(jù)類(lèi)型和Action Message Format(AMF)兩種數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換:發(fā)送時(shí)從ActionScript數(shù)據(jù)類(lèi)型轉(zhuǎn)換成AMF格式;返回的數(shù)據(jù)從AMF數(shù)據(jù)格式轉(zhuǎn)換成ActionScript數(shù)據(jù)類(lèi)型;

(2)在服務(wù)器網(wǎng)關(guān)中,是在.NET語(yǔ)言(C#、Visual Basic)數(shù)據(jù)類(lèi)型和Action Message Format(AMF)兩種數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換:向應(yīng)用服務(wù)器發(fā)送時(shí)從AMF數(shù)據(jù)格式轉(zhuǎn)換成.NET語(yǔ)言(C#、Visual Basic)數(shù)據(jù)類(lèi)型;從應(yīng)用服務(wù)器返回的數(shù)據(jù)從.NET語(yǔ)言(C#、Visual Basic)數(shù)據(jù)類(lèi)型轉(zhuǎn)換成AMF數(shù)據(jù)格式。

如圖17-4所示顯示了這兩次數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。

圖17-4  Flash Remoting MX的兩次數(shù)據(jù)類(lèi)型轉(zhuǎn)換

這兩次數(shù)據(jù)類(lèi)型轉(zhuǎn)換使得Flash Remoting MX可以不依賴服務(wù)器系統(tǒng)的數(shù)據(jù)編碼方法,從而可以非常有效地與各種應(yīng)用服務(wù)器技術(shù)相結(jié)合,包括Microsoft.NET應(yīng)用服務(wù)器技術(shù)。

Flash Remoting MX可以自動(dòng)識(shí)別數(shù)據(jù)類(lèi)型并進(jìn)行相應(yīng)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換。大多數(shù)情況下,數(shù)據(jù)類(lèi)型轉(zhuǎn)換是非常直接簡(jiǎn)單的,你只需將ActionScript數(shù)據(jù)作為參數(shù)傳遞給應(yīng)用服務(wù)器,然后在結(jié)果處理方法中處理返回的結(jié)果即可。但是也有少數(shù)的情況必須考慮數(shù)據(jù)類(lèi)型轉(zhuǎn)換,否則,程序會(huì)出現(xiàn)不可預(yù)知的后果。

下面我們來(lái)詳細(xì)介紹一下.NET語(yǔ)言(Visual Basic)的數(shù)據(jù)類(lèi)型和ActionScript數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換的對(duì)應(yīng)關(guān)系。

1.從ActionScript數(shù)據(jù)類(lèi)型向.NET數(shù)據(jù)類(lèi)型轉(zhuǎn)換

表17-1列出了ActionScript數(shù)據(jù)類(lèi)型和相應(yīng)的應(yīng)用程序服務(wù)器中支持的數(shù)據(jù)類(lèi)型。

表17-1  ActionScript數(shù)據(jù)類(lèi)型和相應(yīng)的VB.NET數(shù)據(jù)類(lèi)型

ActionScript數(shù)據(jù)類(lèi)型

VB.NET數(shù)據(jù)類(lèi)型

Number(簡(jiǎn)單數(shù)據(jù)類(lèi)型)

任何數(shù)值數(shù)據(jù)類(lèi)型,包括Decimal、Double(雙精度浮點(diǎn)型)、Integer和Long(長(zhǎng)整型)

boolean(簡(jiǎn)單數(shù)據(jù)類(lèi)型)

Boolean

String(簡(jiǎn)單數(shù)據(jù)類(lèi)型)

String

ActionScript(AS)對(duì)象

FlashGateway.IO.ASObject

Object(作為參數(shù)被傳遞到遠(yuǎn)程服務(wù)方法的對(duì)象,該對(duì)象是由name/value形式構(gòu)成的)

FlashGateway.IO.ASObject

null

Nothing

undefined

Nothing

Array(索引是連續(xù)的數(shù)值)

System.Collections.ArrayList

Associative Array(索引是名稱(chēng)標(biāo)示)

System.Collections.Hashtable

Date

Date

XML

System.Xml.XmlDocument

RecordSet(不能發(fā)送)

無(wú)對(duì)應(yīng)項(xiàng)

在從ActionScript數(shù)據(jù)類(lèi)型向VB.NET數(shù)據(jù)類(lèi)型轉(zhuǎn)換時(shí)還要注意以下幾個(gè)重要的問(wèn)題:

(1)只要是可能,F(xiàn)lash Remoting MX都會(huì)把ActionScript Number轉(zhuǎn)換成.NET數(shù)值數(shù)據(jù)類(lèi)型。但是,如果數(shù)值不能轉(zhuǎn)換成相應(yīng)的應(yīng)用服務(wù)器數(shù)據(jù)類(lèi)型(例如,ActionScript數(shù)值超出了應(yīng)用服務(wù)器數(shù)據(jù)類(lèi)型一個(gè)整形數(shù)值類(lèi)型的范圍),F(xiàn)lash Remoting MX就會(huì)在服務(wù)器上拋出一個(gè)錯(cuò)誤,因此在開(kāi)發(fā)應(yīng)用程序時(shí)要注意應(yīng)用服務(wù)器數(shù)據(jù)類(lèi)型的取值范圍。

如表17-2所示列出了VB.NET數(shù)值數(shù)據(jù)類(lèi)型的取值范圍。

表17-2  VB.NET數(shù)值數(shù)據(jù)類(lèi)型的取值范圍

Decimal

0 到 +/-79 228 162 514 264 337 593 543 950 335之間不帶小數(shù)點(diǎn)的數(shù);

0 到 +/-7.922 816 251 426 433 759 354 395 033 5 之間帶 28 位小數(shù)的數(shù);

最小非零數(shù)為+/-0.000 000 000 000 000 000 000 000 000 1 (+/-1E-28)。

Double

(雙精度浮點(diǎn)型)

負(fù)數(shù)取值范圍為-1.797 693 134 862 31E+308到 -4.940 656 458 412 47E-324;

正值取值范圍為 4.940 656 458 412 47E-324到 1.797 693 134 862 31E+308。

Integer

-2 147 483 648 到 2 147 483 647。

Long(長(zhǎng)整型)

-9 223 372 036 854 775 808 到 9 223 372 036 854 775 807。

(2)Flash Remoting MX在處理復(fù)合數(shù)組(Associative Array)時(shí)與對(duì)待連續(xù)數(shù)組不同。有一些ActionScript數(shù)組包含了不連續(xù)的索引(例如,僅包含索引0,2和3 ,而不包含索引1的數(shù)組),有一些ActionScript數(shù)組既包含數(shù)字又包含字符串,這些數(shù)組稱(chēng)為復(fù)合數(shù)組。Flash Remoting MX在處理復(fù)合數(shù)組時(shí)會(huì)將索引值轉(zhuǎn)換成鍵值,但是當(dāng)數(shù)值作為鍵值時(shí)是字符串類(lèi)型(例如,"0","1","2")。

2.從.NET數(shù)據(jù)類(lèi)型向ActionScript數(shù)據(jù)類(lèi)型轉(zhuǎn)換

如表17-3所示列出了應(yīng)用程序服務(wù)器數(shù)據(jù)類(lèi)型和相應(yīng)的ActionScript中支持的數(shù)據(jù)類(lèi)型:

表17-3  VB.NET數(shù)據(jù)類(lèi)型和相應(yīng)的ActionScript數(shù)據(jù)類(lèi)型

VB.NET數(shù)據(jù)類(lèi)型

ActionScript數(shù)據(jù)類(lèi)型

Nothing

null

Boolean

Boolean

任何數(shù)值數(shù)據(jù)類(lèi)型,包括Decimal、Double、Integer和Long

Number

Char String

String

Date

Date

System.Collections.ICollection

object[]

Array

System.Collections.Hashtable

System.Collections.IDictionary

Associative array

Sytem.Data.DataSet

由RecordSet對(duì)象組成的復(fù)合數(shù)組

System.Data.DataTable

RecordSet

FlashGateway.IO.ASObject

System.Exception

Object

FlashGateway.IO.ASObject(定義了Type屬性)

Typed Object

System.Xml.XmlDocument

XML

(1)在從應(yīng)用程序服務(wù)器數(shù)據(jù)類(lèi)型向ActionScript數(shù)據(jù)類(lèi)型轉(zhuǎn)換時(shí)的注意事項(xiàng)

①如果應(yīng)用服務(wù)器上的字符串?dāng)?shù)據(jù)表示的是一個(gè)數(shù)字,那么,在ActionScript中,如果需要的話,F(xiàn)lash將會(huì)將該字符串自動(dòng)轉(zhuǎn)換成數(shù)字。

②如果使用setType方法為應(yīng)用服務(wù)器上的flashgateway.io.ASObject對(duì)象定義對(duì)象類(lèi)型,并且對(duì)象類(lèi)型名與ActionScript內(nèi)建的對(duì)象類(lèi)名相同,F(xiàn)lash Remoting MX將會(huì)在ActionScript腳本中創(chuàng)建一個(gè)該類(lèi)的實(shí)例。

③要返回大量且相互獨(dú)立的數(shù)據(jù)給Flash影片應(yīng)用程序,可以定義一個(gè)復(fù)雜的應(yīng)用服務(wù)器變量來(lái)包含這些數(shù)據(jù),例如,一個(gè)變量可以轉(zhuǎn)換成一個(gè)ActionScript對(duì)象,也可以是數(shù)組或者復(fù)合數(shù)組,僅僅返回一個(gè)變量,但是在Flash影片應(yīng)用程序中可以使用該變量中的多個(gè)元素。

(2)處理對(duì)象

當(dāng)在遠(yuǎn)程服務(wù)方法調(diào)用中傳遞一個(gè)Flash對(duì)象時(shí),對(duì)象的屬性被傳遞給網(wǎng)關(guān)。在.NET環(huán)境中,F(xiàn)lashGateway.IO.ASObject類(lèi)(它執(zhí)行ICollection接口)的一個(gè)實(shí)例就相當(dāng)于一個(gè)Flash對(duì)象。因此,你可以向任何接受Map或ICollection的方法傳遞Flash對(duì)象。

因?yàn)镕lash Remoting MX僅僅是傳輸數(shù)據(jù),在服務(wù)器上對(duì)象方法是不適用的,同樣,對(duì)象的屬性也必須是Flash Remoting MX能夠處理的類(lèi)型。例如,你不能在一個(gè)將傳遞給遠(yuǎn)程服務(wù)方法的對(duì)象中包含F(xiàn)lash RecordSet對(duì)象,因?yàn)镕lash Remoting MX不能將RecordSet對(duì)象轉(zhuǎn)換成服務(wù)器上的一種數(shù)據(jù)類(lèi)型。

當(dāng)從服務(wù)器返回一個(gè)對(duì)象給Flash時(shí),F(xiàn)lash Remoting MX將對(duì)象數(shù)據(jù)屬性信息作為Flash對(duì)象發(fā)送給Flash。在Flash中,你可以將該對(duì)象的屬性轉(zhuǎn)換成Flash數(shù)據(jù)類(lèi)型的。

(3)處理ActionScript typed對(duì)象

如果你在ActionScript腳本中使用Object.RegisterClass方法注冊(cè)一個(gè)對(duì)象的話,你就創(chuàng)建了一個(gè)typed對(duì)象。Typed對(duì)象在Flash影片應(yīng)用程序中是非常有用的,它可以用來(lái)創(chuàng)建Flash對(duì)象的子類(lèi)。

在對(duì)Flash Remoting服務(wù)方法的調(diào)用中,你可以使用typed對(duì)象。

在一個(gè)服務(wù)方法調(diào)用中使用typed對(duì)象的一個(gè)實(shí)例,在服務(wù)器端,F(xiàn)lashgateway.IO. ASObject對(duì)象代表參數(shù),它包含了對(duì)象的type名。

例如,下面的ActionScript腳本創(chuàng)建了一個(gè)typed對(duì)象,并在一個(gè)服務(wù)方法中使用該對(duì)象:

//創(chuàng)建一個(gè)類(lèi)(也就是類(lèi)的構(gòu)造器)

myClass = function()

{

    this.Value1 = "Test1";

}

//注冊(cè)類(lèi)

Object.registerClass("testClass", myClass);

//將一個(gè)類(lèi)的實(shí)例發(fā)送到遠(yuǎn)程應(yīng)用服務(wù)器Flash Remoting網(wǎng)關(guān)

myService.myFunction(new testClass());

應(yīng)用服務(wù)器上的服務(wù)方法接收到該請(qǐng)求,參數(shù)是一個(gè)type對(duì)象,在Java和ColdFusion中是flashgateway.io.ASObject,在 .NET環(huán)境中是FlashGateway.IO.ASObject。服務(wù)方法可以訪問(wèn)該類(lèi)的type名:testClass(在Java和ColdFusion中使用對(duì)象的getType方法,在.NET環(huán)境中使用ASType屬性)。

當(dāng)服務(wù)方法創(chuàng)建了一個(gè)新的typed對(duì)象返回Flash Remoting MX時(shí),在Java和ColdFusion中,它實(shí)際是創(chuàng)建了一個(gè)type flashgateway.io.ASObject對(duì)象;在.NET環(huán)境中,它實(shí)際是創(chuàng)建了一個(gè)type FlashGateway.IO.ASObject對(duì)象。服務(wù)方法使用對(duì)象的構(gòu)造器(在.NET環(huán)境中使用ASType屬性)為在ActionScript腳本中使用Object.registerClass方法指定的type設(shè)置類(lèi)名。

當(dāng)Flash客戶端從服務(wù)方法中接收到typed對(duì)象時(shí),F(xiàn)lash運(yùn)行type的構(gòu)造器,并粘附該對(duì)象所有的prototype方法。



17.3  調(diào)用遠(yuǎn)程服務(wù)方法和處理遠(yuǎn)程服務(wù)調(diào)用結(jié)果

使用Flash Remoting MX調(diào)用一個(gè)應(yīng)用服務(wù)就像是在調(diào)用一個(gè)Web服務(wù),或者是在做一個(gè)遠(yuǎn)程過(guò)程調(diào)用(RPC)。因?yàn)椋?dāng)你對(duì)遠(yuǎn)程服務(wù)做一個(gè)調(diào)用時(shí),你會(huì)從該服務(wù)獲得一個(gè)回應(yīng)。當(dāng)使用Web服務(wù)和RPC時(shí),遠(yuǎn)程服務(wù)上的數(shù)據(jù)先從其自身數(shù)據(jù)類(lèi)型被轉(zhuǎn)換成用于網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),這種數(shù)據(jù)只是一種表示法。

與RPC或者Web服務(wù)請(qǐng)求不同,使用Flash Remoting MX進(jìn)行的調(diào)用不直接接收遠(yuǎn)程服務(wù)的結(jié)果,而是編寫(xiě)一個(gè)結(jié)果處理程序來(lái)處理返回的數(shù)據(jù)。由于遠(yuǎn)程服務(wù)調(diào)用和結(jié)果處理程序是相互獨(dú)立的,所以遠(yuǎn)程服務(wù)調(diào)用和結(jié)果處理是異步進(jìn)行的。也就是說(shuō),遠(yuǎn)程服務(wù)請(qǐng)求就像是一個(gè)沒(méi)有返回結(jié)果的方法調(diào)用,而遠(yuǎn)程服務(wù)請(qǐng)求的結(jié)果回應(yīng)就像是一個(gè)Flash事件,你是為該事件編寫(xiě)了一個(gè)事件處理方法。

17.3.1  調(diào)用遠(yuǎn)程服務(wù)方法

要調(diào)用存在于一個(gè)服務(wù)對(duì)象中的方法,可以使用服務(wù)對(duì)象名,后面跟一個(gè)應(yīng)用服務(wù)器方法名,就像下面的一行腳本語(yǔ)句:

weatherSvc.getTemperature("New York");

在本例中,方法getTemperature是位于應(yīng)用服務(wù)器上的一個(gè)公共方法或應(yīng)用程序網(wǎng)頁(yè) ,并且該方法也可以傳遞字符串格式的參數(shù):New York。也可以使用遠(yuǎn)程服務(wù)方法傳遞多個(gè)參數(shù),只需使用“逗號(hào)(,)”將參數(shù)隔開(kāi),例如下面的腳本代碼:

weatherSvc.getTemperature("New York", 1998, "average");

在本例中,遠(yuǎn)程服務(wù)方法傳遞了三個(gè)參數(shù):一個(gè)城市名(New York)、一個(gè)年份值(1998)和一個(gè)命令(average)。該方法用來(lái)求取1998年New York的平均氣溫。

注意:遠(yuǎn)程服務(wù)方法中的參數(shù)必須按照固定順序排列。

如果沒(méi)有在創(chuàng)建Service類(lèi)實(shí)例時(shí)定義結(jié)果處理方法,那么可以在調(diào)用遠(yuǎn)程服務(wù)方法時(shí)定義一個(gè)Responder(回應(yīng))對(duì)象,用做結(jié)果處理的回應(yīng)對(duì)象;如果在創(chuàng)建Service類(lèi)實(shí)例時(shí)已經(jīng)定義了結(jié)果處理方法,那么就不要在調(diào)用遠(yuǎn)程服務(wù)方法時(shí)再定義Responder對(duì)象了。

因此,定義Responder對(duì)象時(shí),一般有兩種方法:

l         為一個(gè)Service類(lèi)實(shí)例的所有方法定義同一個(gè)Responder對(duì)象

l         為每一個(gè)方法定義不同的Responder對(duì)象

注意:在使用Connection對(duì)象的getService方法時(shí)定義了Responder對(duì)象后,就不要同時(shí)使用遠(yuǎn)程服務(wù)方法定義Responder對(duì)象。如果這樣做的話,F(xiàn)lash Remoting MX就會(huì)將遠(yuǎn)程服務(wù)方法中定義的Responder對(duì)象作為一個(gè)參數(shù)傳遞給遠(yuǎn)程服務(wù)方法,這樣程序就會(huì)出問(wèn)題。

要為一個(gè)特定的遠(yuǎn)程服務(wù)方法定義結(jié)果處理方法,可以在定義方法的參數(shù)時(shí)將結(jié)果處理方法作為該方法的第一個(gè)參數(shù),例如下面的腳本:

weatherSvc.getTemperature( new temperatureResult(), "New York", 1998, "average" );

在該例中,名為temperatureResult的結(jié)果處理方法就用來(lái)接收和處理返回的調(diào)用結(jié)果,還包括getTemperature 遠(yuǎn)程服務(wù)方法的出錯(cuò)信息。


17.3.2  定義遠(yuǎn)程服務(wù)方法

為了使用Flash Remoting MX,你必須在應(yīng)用服務(wù)器上為Flash Remoting MX定義應(yīng)用遠(yuǎn)程服務(wù)方法。根據(jù)應(yīng)用服務(wù)器的種類(lèi)不同,應(yīng)用遠(yuǎn)程服務(wù)方法也不相同,并且同一種類(lèi)服務(wù)器所能夠應(yīng)用的應(yīng)用服務(wù)器方法名也不相同,在本書(shū)中僅介紹在.NET應(yīng)用服務(wù)器上為使用Flash Remoting MX創(chuàng)建應(yīng)用服務(wù)器的方法。

前面我們已經(jīng)簡(jiǎn)單地介紹了 .NET應(yīng)用服務(wù)器上可以作為Flash Remoting MX應(yīng)用服務(wù)器方法的Microsoft.NET技術(shù),包括ASP.NET網(wǎng)頁(yè)、Web服務(wù)和程序集方法。

下面,我們?cè)俅螐?qiáng)調(diào)一下,把這三種技術(shù)列在表17-4中。

表17-4  可以作為Flash Remoting MX應(yīng)用服務(wù)器方法的Microsoft.NET技術(shù)

ASP.NET網(wǎng)頁(yè)(.aspx)

網(wǎng)絡(luò)根目錄所在的目錄

ASP.NET網(wǎng)頁(yè)

DLL文件(.dll)

充分授權(quán)的類(lèi)名

Public方法

.NET Web服務(wù)

命名空間

使用WSDL描述的網(wǎng)絡(luò)服務(wù)器方法



17.3.3  處理遠(yuǎn)程服務(wù)方法調(diào)用結(jié)果

當(dāng)應(yīng)用服務(wù)器返回遠(yuǎn)程服務(wù)方法調(diào)用的結(jié)果時(shí),事件處理方法就會(huì)應(yīng)用返回的數(shù)據(jù),或者處理返回的出錯(cuò)信息。

例如,結(jié)果處理方法可以在Flash影片應(yīng)用程序中顯示調(diào)用結(jié)果,而出錯(cuò)處理方法可以在Flash影片應(yīng)用程序中設(shè)置trace方法顯示出錯(cuò)信息。

對(duì)于使用Service類(lèi)創(chuàng)建到遠(yuǎn)程服務(wù)的連接并調(diào)用遠(yuǎn)程服務(wù)方法的,以及可以使用RelayResponder 構(gòu)造器直接指定對(duì)象和事件處理方法的,你可以直接使用這里定義的對(duì)象和事件處理方法處理返回的結(jié)果或出錯(cuò)信息。

對(duì)于使用NetServices類(lèi)和Connection類(lèi)創(chuàng)建到遠(yuǎn)程服務(wù)的連接,并調(diào)用遠(yuǎn)程服務(wù)方法的,則有更多的選擇,你可以定義結(jié)果處理層級(jí)。

1.結(jié)果處理層級(jí)

Flash Remoting MX支持下列事件處理層級(jí):

(1)如果在使用Connection對(duì)象的getService方法時(shí)定義了Responder對(duì)象,那么Flash Remoting MX就會(huì)做下列事件:

①如果Responder對(duì)象中有一個(gè)形如functionName_Result的方法,并且functionName是調(diào)用的遠(yuǎn)程服務(wù)方法名,F(xiàn)lash Remoting MX就會(huì)將該方法調(diào)用的結(jié)果返回給與該方法同名的_Result方法。

②如果Responder對(duì)象中有一個(gè)名為onResult的方法,F(xiàn)lash Remoting MX就會(huì)將該方法調(diào)用的結(jié)果返回給該方法。

(2)如果在調(diào)用遠(yuǎn)程服務(wù)方法時(shí)定義了Responder對(duì)象,那么Flash Remoting MX就會(huì)將結(jié)果返回給該對(duì)象的onResult方法。

注意:在使用Connection對(duì)象的getService方法定義了Responder對(duì)象后,就不要同時(shí)使用遠(yuǎn)程服務(wù)方法定義Responder對(duì)象。如果這樣做的話,F(xiàn)lash Remoting MX就會(huì)將遠(yuǎn)程服務(wù)方法中定義的Responder對(duì)象作為一個(gè)參數(shù)傳遞給遠(yuǎn)程服務(wù)方法,這樣程序就會(huì)出問(wèn)題。

(3)當(dāng)在Flash創(chuàng)作環(huán)境開(kāi)發(fā)階段測(cè)試應(yīng)用程序時(shí),沒(méi)有定義一個(gè)Responder對(duì)象,那么Flash Remoting MX就會(huì)在“輸出”面板中顯示調(diào)用結(jié)果。

2.結(jié)果處理策略

不同的結(jié)果處理程序?yàn)殚_(kāi)發(fā)人員提供了各種不同的結(jié)果處理策略,開(kāi)發(fā)人員可以使用不同的策略來(lái)適應(yīng)應(yīng)用程序的需要。

下面我們來(lái)詳細(xì)介紹一下開(kāi)發(fā)過(guò)程中要應(yīng)用的結(jié)果處理策略。

(1)使用getService方法定義Responder對(duì)象

如果使用gatewayConnection.getService方法定義Responder對(duì)象,那么可以應(yīng)用下面的技術(shù):

①在gatewayConnection.getService方法中定義一個(gè)對(duì)象(一般是主時(shí)間軸this)作為Responder對(duì)象,然后在主時(shí)間軸中為每一個(gè)遠(yuǎn)程服務(wù)方法創(chuàng)建一個(gè)單獨(dú)的_Result處理方法。

一般在滿足下列條件時(shí)使用該技術(shù):

l         對(duì)一個(gè)方法調(diào)用的_Result方法應(yīng)與對(duì)另一個(gè)方法調(diào)用的_Result方法不同

l         對(duì)于所有遠(yuǎn)程服務(wù)中的所有方法來(lái)說(shuō),每個(gè)一方法都有一個(gè)獨(dú)一無(wú)二的方法名。例如,你不能在兩個(gè)遠(yuǎn)程服務(wù)調(diào)用中使用相同名字的方法:myFirstService. myFunction和myOtherService.myFunction,這樣就會(huì)出問(wèn)題,因?yàn)閮蓚€(gè)結(jié)果需要不同的處理過(guò)程

l         在一個(gè)遠(yuǎn)程服務(wù)中對(duì)一個(gè)特定方法的調(diào)用可以使用一個(gè)Responder對(duì)象處理

②在gatewayConnection.getService方法中定義一個(gè)對(duì)象(一般是主時(shí)間軸this)作為Responder對(duì)象,然后在主時(shí)間軸中創(chuàng)建一個(gè)onResult方法處理所有的遠(yuǎn)程服務(wù)方法調(diào)用結(jié)果。

這種技術(shù)只有在對(duì)所有遠(yuǎn)程服務(wù)方法的所有請(qǐng)求的結(jié)果可以使用一個(gè)方式進(jìn)行處理時(shí)才適用。

③使用前兩種方法的結(jié)合。在gatewayConnection.getService方法中定義一個(gè)對(duì)象(一般是主時(shí)間軸this)作為Responder對(duì)象,然后在主時(shí)間軸中為一些遠(yuǎn)程服務(wù)方法創(chuàng)建單獨(dú)的_Result方法,然后為其他的遠(yuǎn)程服務(wù)方法創(chuàng)建一個(gè)onResult方法處理這些遠(yuǎn)程服務(wù)方法調(diào)用的結(jié)果。

一般在滿足下列條件時(shí)使用該技術(shù):

l         一些遠(yuǎn)程服務(wù)方法的調(diào)用結(jié)果的處理機(jī)制與其他遠(yuǎn)程服務(wù)方法調(diào)用結(jié)果的處理機(jī)制不同

l         處理機(jī)制不同的所有遠(yuǎn)程服務(wù)調(diào)用中的方法有一個(gè)獨(dú)一無(wú)二的方法名

l         一些遠(yuǎn)程服務(wù)方法雖然方法名不同,但其調(diào)用結(jié)果的處理機(jī)制相同

l         對(duì)一個(gè)特定方法的不同調(diào)用,其調(diào)用結(jié)果可以使用一個(gè)Responder對(duì)象處理

使用處理層級(jí)的例子

下面的例子揭示了怎樣使用主時(shí)間軸作為Responder對(duì)象,并且為一些遠(yuǎn)程服務(wù)方法定義一個(gè)onResult結(jié)果處理方法,以及為其他的一些遠(yuǎn)程服務(wù)方法定義特定的functionName_Result結(jié)果處理方法。

在該例中,有兩個(gè)方法用于特定的functionName_Result結(jié)果處理方法,它們是getTemperature_Result和getForecast_Result(這兩個(gè)方法用來(lái)顯示返回的temperature和forecast)。而onResult結(jié)果處理方法用來(lái)在一個(gè)信息文本框中顯示結(jié)果:

//初始化連接

if (inited == null) {

    inited = true;

    NetServices.setDefaultGatewayURL

               ("http://localhost/flashservices/gateway.aspx");

    gatewayConnection = NetServices.createGatewayConnection();

    //定義主時(shí)間軸作為默認(rèn)的Responder對(duì)象

    weatherService = gatewayConnection.getService("flashExamples.weatherStation",

                this);

}

//結(jié)果處理方法

function getTemperature_Result(temperature) {

    temperatureIndicator.text = temperature;

}

function getForecast_Result(forecast) {

    forecastIndicator.text = forecast;

}

//默認(rèn)的回應(yīng)處理方法

function onResult(result) {

    generalMessageBox.text = result;

}

//調(diào)用遠(yuǎn)程服務(wù)方法

weatherService.getTemperature("New York");

weatherService.getForecast("Chicago");

weatherService.getServiceStatus("San Francisco");

weatherService.getUsageStats();

(2)使用遠(yuǎn)程服務(wù)方法定義Responder對(duì)象

如果要在調(diào)用遠(yuǎn)程服務(wù)方法時(shí)定義Responder對(duì)象,可以使用下面的技術(shù):

①定義一個(gè)Responder對(duì)象。使用結(jié)果處理方法將結(jié)果值賦給一個(gè)Responder對(duì)象,可以將Responder對(duì)象的一個(gè)實(shí)例作為gatewayConnection.getService方法的一個(gè)參數(shù)傳遞給它。

使用這種技術(shù)比使用this作為Responder對(duì)象更加面向?qū)ο螅@允許你使用更加結(jié)構(gòu)化的代碼。

②定義幾個(gè)不同的Responder對(duì)象。使用結(jié)果處理方法將結(jié)果值賦給不同的Responder對(duì)象,可以將每一個(gè)Responder對(duì)象的一個(gè)實(shí)例作為serviceName.functionName調(diào)用時(shí)的一個(gè)參數(shù)傳遞給它。

該技術(shù)允許開(kāi)發(fā)人員為特定Responder對(duì)象創(chuàng)建方法,在這種情況下,一些service應(yīng)有相同的方法名,但是返回的數(shù)據(jù)不同;該技術(shù)也允許開(kāi)發(fā)人員為一個(gè)遠(yuǎn)程服務(wù)方法創(chuàng)建幾個(gè)不同的結(jié)果處理方法。

③使用上述兩種方法的結(jié)合。為一些遠(yuǎn)程服務(wù)方法使用多個(gè)Responder對(duì)象;為另一些遠(yuǎn)程服務(wù)方法使用單獨(dú)的一個(gè)Responder對(duì)象。

下面是在遠(yuǎn)程服務(wù)方法調(diào)用中為每一方法定義一個(gè)result對(duì)象的例子,與前面介紹的例子目的基本相同,但是我們?cè)谠摾倪h(yuǎn)程服務(wù)方法調(diào)用中為每一調(diào)用定義了回應(yīng)處理對(duì)象。

在該例中,有三個(gè)回應(yīng)處理對(duì)象,它們是tempResult、forecastResult和generalResult(這三個(gè)回應(yīng)處理對(duì)象分別用來(lái)顯示返回的temperature、forecast和其他的遠(yuǎn)程服務(wù)方法)。每一個(gè)回應(yīng)處理對(duì)象中有一個(gè)onResult結(jié)果處理方法用來(lái)處理遠(yuǎn)程服務(wù)方法調(diào)用返回的結(jié)果:

//初始化連接

if (inited == null) {

    inited = true;

    NetServices.setDefaultGatewayURL

                 ("http://localhost/flashservices/gateway.aspx");

    gatewayConnection = NetServices.createGatewayConnection();

    //在創(chuàng)建Service類(lèi)實(shí)例時(shí)不要定義默認(rèn)的Responder對(duì)象

    weatherService = gatewayConnection.getService

                           ("flashExamples.weatherStation");

}

//Temperature的結(jié)果處理對(duì)象

function tempResult() {

    this.onResult = function(temperature) {

        temperatureIndicator.text = temperature;

    };

}

//Forecast的結(jié)果處理對(duì)象

function forecastResult() {

    this.onResult = function(forecast) {

        forecastIndicator.text = forecast;

    };

}

//General的結(jié)果處理對(duì)象

function generalResult() {

    this.onResult = function(result) {

        generalMessageBox.text = result;

    };

}

//調(diào)用遠(yuǎn)程服務(wù)方法,并指定結(jié)果處理方法的一個(gè)實(shí)例作為第一個(gè)參數(shù)

weatherService.getTemperature(new tempResult(), "New York");

weatherService.getForecast(new forecastResult(), "Chicago");

weatherService.getServiceStatus(new generalResult(), "San Francisco");

weatherService.getUsageStats(new generalResult());


posted on 2007-08-02 10:32 譚文政 閱讀(1457) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Flash ActionScript
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99精品99久久久久久宅男| 亚洲一区二区高清| 激情av一区二区| 精品9999| 亚洲国产日本| 亚洲小少妇裸体bbw| 欧美巨乳在线观看| 亚洲网站啪啪| 亚洲精品系列| 欧美三级不卡| 久久精品麻豆| 亚洲天堂黄色| 国产精品视频免费观看www| 亚洲无限乱码一二三四麻| 免费观看在线综合色| 亚洲一区三区电影在线观看| 欧美日韩国产区一| 欧美一区二区在线视频| 激情欧美国产欧美| 国产精品日韩欧美一区二区| 国产一区99| 久久婷婷久久| 亚洲日韩中文字幕在线播放| 久久久久久黄| 99精品国产在热久久| 免费久久精品视频| 欧美精品1区| 欧美激情导航| 国产精品久久久久91| 性色一区二区| 久久一综合视频| 亚洲综合首页| 国产欧美一区二区三区久久| 欧美黑人在线播放| 久久久亚洲高清| 欧美网站大全在线观看| 久久久久久综合| 欧美日韩中文在线| 久久亚洲欧洲| 欧美激情亚洲视频| 在线性视频日韩欧美| 欧美激情亚洲国产| 欧美福利在线观看| 在线播放精品| 久久久久一区二区三区四区| 亚洲伦理在线| 欧美激情久久久久| 亚洲人成啪啪网站| 亚洲激情成人在线| 鲁大师影院一区二区三区| 伊甸园精品99久久久久久| 久久久久99| 免费亚洲视频| 亚洲图片在线观看| 亚洲欧美日韩在线一区| 国产精品稀缺呦系列在线| 久久国产乱子精品免费女| 久久精品综合一区| 亚洲电影免费观看高清完整版| 久久综合激情| 欧美日韩精品系列| 久久久国产精彩视频美女艺术照福利| 性感少妇一区| 一区二区三区国产精华| 欧美在线视频免费观看| 亚洲美女黄色| 久久精品91| 亚洲性夜色噜噜噜7777| 亚洲一区二区三区中文字幕| 香蕉亚洲视频| 欧美亚一区二区| 亚洲伦理在线| 中文在线资源观看网站视频免费不卡| 91久久香蕉国产日韩欧美9色| 国产亚洲视频在线| 久久综合网hezyo| 亚洲国产视频直播| 一区二区三区日韩精品视频| 欧美日韩裸体免费视频| 性18欧美另类| 麻豆成人在线观看| 国产精品久久久| 亚洲国产日本| 在线精品视频一区二区| 久久精品国产99| 久久综合久色欧美综合狠狠| 国产亚洲免费的视频看| 午夜精品美女自拍福到在线 | 欧美激情一区二区三区| 在线精品亚洲| 欧美美女视频| 欧美一区亚洲二区| 久久久999| 亚洲乱亚洲高清| 久久黄色影院| 欧美精品色网| 国内揄拍国内精品久久| 亚洲伦理在线免费看| 新67194成人永久网站| 欧美成人精品h版在线观看| 亚洲精品中文在线| 欧美一级大片在线观看| 欧美影院午夜播放| 欧美成人tv| 欧美日韩国产成人精品| 欧美午夜免费影院| 国产精品国产三级国产aⅴ入口| 另类春色校园亚洲| 亚洲精品孕妇| 亚洲高清在线视频| 久久久www成人免费精品| 99热这里只有精品8| 欧美日韩国产麻豆| 亚洲综合精品自拍| 亚洲欧洲一区二区在线播放| 在线视频亚洲欧美| 亚洲成人在线视频网站| 国产亚洲欧美另类一区二区三区| 国产综合久久久久影院| 国产精品手机在线| 黄色成人91| 亚洲一区在线免费观看| 亚洲成人自拍视频| 91久久线看在观草草青青| 狠狠色丁香久久综合频道| 国产欧美日韩综合| 国产一级揄自揄精品视频| 国产精品有限公司| 韩国视频理论视频久久| 在线日韩av| 日韩一级精品| 亚洲欧美日韩成人高清在线一区| 在线一区二区三区做爰视频网站 | 亚洲国产日韩一级| 久久久五月婷婷| 亚洲第一视频网站| 在线中文字幕一区| 久久一二三四| 国产精品网站在线播放| 亚洲精选中文字幕| 久久久亚洲国产美女国产盗摄| 精品福利电影| 99精品久久免费看蜜臀剧情介绍| 亚洲欧美日韩精品| 欧美韩日一区二区| 激情综合色丁香一区二区| 一区二区三区日韩| 亚洲二区精品| 欧美成人性网| 亚洲电影av| 久久久久国产免费免费| 99re热这里只有精品免费视频| 久久精品日产第一区二区| 国产精品人成在线观看免费| 夜久久久久久| 欧美成年人视频网站欧美| 校园激情久久| 亚洲第一成人在线| 欧美国产日韩在线| 女同性一区二区三区人了人一| 在线观看日韩精品| 欧美电影在线免费观看网站| 久久国产精品高清| 亚洲国产欧美另类丝袜| 亚洲国产精品女人久久久| 欧美国产视频在线| 亚洲欧美另类久久久精品2019| 亚洲午夜视频在线观看| 影音先锋在线一区| 亚洲国产成人精品女人久久久| 欧美freesex交免费视频| 在线一区二区三区四区五区| 亚洲在线日韩| 亚洲精品在线观看免费| 日韩一级视频免费观看在线| 国产精品日韩欧美一区二区| 久久久亚洲高清| 欧美日韩中文| 媚黑女一区二区| 国产精品女人久久久久久| 欧美99在线视频观看| 欧美日韩精品欧美日韩精品一| 久久久久久网| 欧美成人一区二区| 国产精品性做久久久久久| 欧美激情在线| 欧美自拍偷拍| 国产亚洲日本欧美韩国| 宅男噜噜噜66一区二区66| 亚洲精品视频啊美女在线直播| 亚洲精品中文字幕在线| 久久精品免费| 99日韩精品| 久久国产婷婷国产香蕉| 久久久午夜精品| 一本一本久久a久久精品综合妖精| 欧美一二三区在线观看| 亚洲国产一区视频| 国产一区二区三区四区三区四| 欧美久久久久久久久|