• <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>

            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)站開發(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)用程序中“控件(組件)”可以用來顯示文本和圖形,用戶還可以鍵入文字信息并和遠(yuǎn)程服務(wù)器進(jìn)行通信,從這一點(diǎn)上來說非常像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開發(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í)就必須使用兩種開發(fā)語(yǔ)言:ActionScript和應(yīng)用服務(wù)器使用的開發(fā)語(yǔ)言。因此,使用Flash Remoting MX構(gòu)建Flash影片應(yīng)用程序至少要求有兩個(gè)不同開發(fā)環(huán)境的知識(shí)。

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

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

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

            應(yīng)用服務(wù)器有很多種,使用的開發(fā)語(yǔ)言也很多:ColdFusion使用ColdFusion開發(fā)語(yǔ)言;Java就是使用Java語(yǔ)言;.NET則支持的語(yǔ)言很多,包括VB、C#等。開發(fā)工具也多種多樣,你可以使用文本編輯器也可以選擇集成開發(fā)環(huán)境(IDE)。集成開發(fā)環(huán)境一般支持相關(guān)的程序語(yǔ)言及其API。Dreamweaver是一個(gè)不錯(cuò)的IDE,它支持ColdFusion、JSP和ASP.NET。本書主要是使用VB.NET開發(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ì)人員和開發(fā)人員協(xié)同工作。設(shè)計(jì)人員創(chuàng)建用戶界面,開發(fā)人員編寫客戶端ActionScript腳本代碼和應(yīng)用服務(wù)器邏輯。

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

            這是應(yīng)用Flash Remoting MX技術(shù)開發(fā)Flash影片應(yīng)用程序工程的架構(gòu)設(shè)計(jì)模式,下面我們就來了解一下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ì)模式。除了可以提高開發(fā)效率、減少由于設(shè)計(jì)方面的欠缺導(dǎo)致的誤解外,該模式可以用來強(qiáng)制檢查“客戶端/服務(wù)器”之間的交互,提高應(yīng)用程序的性能和穩(wěn)定性。

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

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

            MVC程序軟件開發(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é)合起來。為了將網(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ì)象可以用來打包遠(yuǎn)程服務(wù)數(shù)據(jù),僅返回一個(gè)對(duì)象給Flash影片應(yīng)用程序,這樣就避免了無數(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ì)人,用來接收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。它們都可以接收所有來自Flash影片應(yīng)用程序的功能請(qǐng)求,并將這些請(qǐng)求分配給相應(yīng)的應(yīng)用服務(wù)器資源或者根據(jù)請(qǐng)求進(jìn)行網(wǎng)絡(luò)服務(wù)調(diào)用,在本書前面的章節(jié)已經(jīng)為您詳細(xì)地介紹過怎樣使用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ù)名稱將該請(qǐng)求映射到對(duì)應(yīng)的服務(wù)適配器。要避免名稱沖突,可以在ActionScript腳本代碼中定義目錄結(jié)構(gòu)、充分授權(quán)的類名或包名,或者是描述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開發(fā)人員編寫ActionScript腳本代碼可以使用一個(gè)稱為NetServices或Service的功能類庫(kù)連接到一個(gè)遠(yuǎn)程.NET服務(wù)器,或者引用一個(gè)遠(yuǎn)程服務(wù),調(diào)用遠(yuǎn)程服務(wù)的功能。

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

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

            對(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,可打開Windows控制面板,雙擊“添加/刪除應(yīng)用程序”選項(xiàng),查看有沒有Microsoft.NET Framework SDK。如果沒有看到,就要下載一個(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è)代碼隱藏類文件和Web服務(wù)中。一個(gè) .NET 程序集(flashgateway.dll)位于ASP.NET應(yīng)用程序本地程序集緩存中,它提供了Flash Remoting MX的功能。



            17.2.2  關(guān)于AMF

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

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

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

            AMF的全稱是Action Message Format,它采用二進(jì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可以編碼和解碼通過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類或Service類的方法自動(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ù)類型

            當(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ù)類型和Action Message Format(AMF)兩種數(shù)據(jù)類型之間轉(zhuǎn)換:發(fā)送時(shí)從ActionScript數(shù)據(jù)類型轉(zhuǎn)換成AMF格式;返回的數(shù)據(jù)從AMF數(shù)據(jù)格式轉(zhuǎn)換成ActionScript數(shù)據(jù)類型;

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

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

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

            這兩次數(shù)據(jù)類型轉(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ù)類型并進(jìn)行相應(yīng)的數(shù)據(jù)類型轉(zhuǎn)換。大多數(shù)情況下,數(shù)據(jù)類型轉(zhuǎn)換是非常直接簡(jiǎn)單的,你只需將ActionScript數(shù)據(jù)作為參數(shù)傳遞給應(yīng)用服務(wù)器,然后在結(jié)果處理方法中處理返回的結(jié)果即可。但是也有少數(shù)的情況必須考慮數(shù)據(jù)類型轉(zhuǎn)換,否則,程序會(huì)出現(xiàn)不可預(yù)知的后果。

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

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

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

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

            ActionScript數(shù)據(jù)類型

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

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

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

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

            Boolean

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

            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(索引是名稱標(biāo)示)

            System.Collections.Hashtable

            Date

            Date

            XML

            System.Xml.XmlDocument

            RecordSet(不能發(fā)送)

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

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

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

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

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

            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ù)組稱為復(fù)合數(shù)組。Flash Remoting MX在處理復(fù)合數(shù)組時(shí)會(huì)將索引值轉(zhuǎn)換成鍵值,但是當(dāng)數(shù)值作為鍵值時(shí)是字符串類型(例如,"0","1","2")。

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

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

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

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

            ActionScript數(shù)據(jù)類型

            Nothing

            null

            Boolean

            Boolean

            任何數(shù)值數(shù)據(jù)類型,包括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ù)類型向ActionScript數(shù)據(jù)類型轉(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ì)象類型,并且對(duì)象類型名與ActionScript內(nèi)建的對(duì)象類名相同,F(xiàn)lash Remoting MX將會(huì)在ActionScript腳本中創(chuàng)建一個(gè)該類的實(shí)例。

            ③要返回大量且相互獨(dú)立的數(shù)據(jù)給Flash影片應(yīng)用程序,可以定義一個(gè)復(fù)雜的應(yīng)用服務(wù)器變量來包含這些數(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類(它執(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能夠處理的類型。例如,你不能在一個(gè)將傳遞給遠(yuǎn)程服務(wù)方法的對(duì)象中包含F(xiàn)lash RecordSet對(duì)象,因?yàn)镕lash Remoting MX不能將RecordSet對(duì)象轉(zhuǎn)換成服務(wù)器上的一種數(shù)據(jù)類型。

            當(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ù)類型的。

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

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

            在對(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è)類(也就是類的構(gòu)造器)

            myClass = function()

            {

                this.Value1 = "Test1";

            }

            //注冊(cè)類

            Object.registerClass("testClass", myClass);

            //將一個(gè)類的實(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ù)方法可以訪問該類的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è)置類名。

            當(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)程過程調(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ù)類型被轉(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é)果,而是編寫一個(gè)結(jié)果處理程序來處理返回的數(shù)據(jù)。由于遠(yuǎn)程服務(wù)調(diào)用和結(jié)果處理程序是相互獨(dú)立的,所以遠(yuǎn)程服務(wù)調(diào)用和結(jié)果處理是異步進(jìn)行的。也就是說,遠(yuǎn)程服務(wù)請(qǐng)求就像是一個(gè)沒有返回結(jié)果的方法調(diào)用,而遠(yuǎn)程服務(wù)請(qǐng)求的結(jié)果回應(yīng)就像是一個(gè)Flash事件,你是為該事件編寫了一個(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ù)隔開,例如下面的腳本代碼:

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

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

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

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

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

            l         為一個(gè)Service類實(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ì)出問題。

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

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

            在該例中,名為temperatureResult的結(jié)果處理方法就用來接收和處理返回的調(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ù)器的種類不同,應(yīng)用遠(yuǎn)程服務(wù)方法也不相同,并且同一種類服務(wù)器所能夠應(yīng)用的應(yīng)用服務(wù)器方法名也不相同,在本書中僅介紹在.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)的類名

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

            對(duì)于使用NetServices類和Connection類創(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ì)出問題。

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

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

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

            下面我們來詳細(xì)介紹一下開發(fā)過程中要應(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ù)中的所有方法來說,每個(gè)一方法都有一個(gè)獨(dú)一無二的方法名。例如,你不能在兩個(gè)遠(yuǎn)程服務(wù)調(diào)用中使用相同名字的方法:myFirstService. myFunction和myOtherService.myFunction,這樣就會(huì)出問題,因?yàn)閮蓚€(gè)結(jié)果需要不同的處理過程

            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ú)一無二的方法名

            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è)方法用來顯示返回的temperature和forecast)。而onResult結(jié)果處理方法用來在一個(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ù)允許開發(fā)人員為特定Responder對(duì)象創(chuàng)建方法,在這種情況下,一些service應(yīng)有相同的方法名,但是返回的數(shù)據(jù)不同;該技術(shù)也允許開發(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ì)象分別用來顯示返回的temperature、forecast和其他的遠(yuǎn)程服務(wù)方法)。每一個(gè)回應(yīng)處理對(duì)象中有一個(gè)onResult結(jié)果處理方法用來處理遠(yuǎn)程服務(wù)方法調(diào)用返回的結(jié)果:

            //初始化連接

            if (inited == null) {

                inited = true;

                NetServices.setDefaultGatewayURL

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

                gatewayConnection = NetServices.createGatewayConnection();

                //在創(chuàng)建Service類實(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 譚文政 閱讀(1432) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Flash ActionScript
            伊人久久大香线蕉亚洲五月天| 无码人妻久久一区二区三区蜜桃| 久久精品aⅴ无码中文字字幕不卡| 国产精品久久自在自线观看| 久久精品亚洲男人的天堂| 一本一道久久综合狠狠老| 欧美777精品久久久久网| 久久热这里只有精品在线观看| 97久久天天综合色天天综合色hd| 久久亚洲天堂| 久久亚洲精品中文字幕三区| 怡红院日本一道日本久久| 亚洲Av无码国产情品久久| 国产成人精品免费久久久久| 亚洲欧美日韩久久精品| 国产精品美女久久久免费| 久久精品九九亚洲精品| 亚洲va久久久久| 久久久久久久综合日本| 91精品国产91久久| 99国产精品久久久久久久成人热| 伊人久久大香线焦AV综合影院| 怡红院日本一道日本久久 | 88久久精品无码一区二区毛片| 伊人久久亚洲综合影院| 国产精品VIDEOSSEX久久发布| 香蕉久久av一区二区三区| 久久这里只有精品首页| 亚洲国产精品成人久久蜜臀| 久久er国产精品免费观看8| 精品一区二区久久久久久久网站| 久久久婷婷五月亚洲97号色 | 午夜福利91久久福利| 国产成人综合久久精品尤物| 狠狠色丁香久久综合五月| 久久99国产精品尤物| 欧洲精品久久久av无码电影| 久久久久久曰本AV免费免费| 久久人妻无码中文字幕| 亚洲国产精品无码久久久蜜芽 | 久久久久无码精品国产|