亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

SOAP+Flash 更友好的Web應用程序

2019-11-17 04:51:10
字體:
來源:轉載
供稿:網友

  利用Flash5的xml能力,用SOAP進行通訊,可以創建Flash界面Web應用程序。SOAP(Simple Object access PRotocal)是通過網絡平臺在不同的系統間交換數據的方法。SOAP使用XML文檔,通過類似于HTTP的協議處理網頁的請求和和回應動作。

  由微軟的.NET和Apache SOAP看來,SOAP是用來在不同的系統間交換數據協議中是最方便的一種。

  這篇文章中,你可以看到怎樣建立一個基于Flash的計算器,并利用SOAP進行遠程過程調用(RPC)在服務器上建立簡單的計算程序。

  要完成這個例子,你需要安裝了Flash5,微軟的SOAP Toolkit2.0 SP2,Visual Basic,Windows NT/2000 server和IIS。

  本程序需要建立服務器應用程序和監聽器,用來處理所有收到的SOAP請求。這個程序使用了微軟的asp監聽器和SOAPCalc ActiveX DLL,這些都可以在微軟的SOAP Tookit中找到。

  另外,還需要一個封裝了SOAP的Flash組件,這個免費的組件可以在http://software.mrev.com/soap.asp下載到。

  都預備好了之后,讓我們開始吧。

  第一步:建立ASP監聽器

  在服務器端,需要對進入的SOAP請求進行操作。可以使用ASP文件來處理這些請求。首先,在IIS中建立一個新的目錄或是虛擬目錄,并命名為SOAPCalc。在這個目錄中,建立一個新的ASP文件,并命名為“default.asp”

  輸入以下代碼:

<%@language=vbscript%>
<%
  Set CalcSrv = Server.CreateObject("SOAPCalc.CalcSrv")
  CalcSrv.Process Request, Response
%>
  這個ASP頁面接收從Flash中發送來的SOAP XML請求,并把Request和Response對象傳遞給CalcServ組件

SOAP+Flash 更友好的Web應用程序(圖一)
圖1
CalcSrv從數據流中讀入并解析SOAP請求,完成所需要的計算。并且把ASP的Response對象通過SOAP送到客戶端。

SOAP+Flash 更友好的Web應用程序(圖二)
圖2
  客戶端的Flash應用程序讀取了返回數據,刷新計算器的顯示。
  第二步:建立服務器端計算器組件

  下一步,建立服務器端的用來完成計算操作的組件。打開Visual Basic 6,建立一個新的ActiveX DLL工程。

  這個組件和SOAP Toolkit中的“Using a Low Level API for SOAP Messages”這個例子程序是相同的,但是我們把工程的名字改成了SOAPCalc。假如你沒有安裝Visual Basic,也可以直接下載編譯過的CalcServ安裝程序(見參考)。安裝程序將復制并注冊所有需要的文件。本文后面的zip包中有這個例子的VB代碼,以及編譯好的DLL文件。

  這個演示程序通過SOAP reader對象讀取進入的請求。然后,它將檢查請求中的SOAP封裝是否包含叫做<Add><SuBTract>, <Multiply> 或 <Divide>的節點,以及兩個子節點<A>和<B>。假如找到了,它將處理請求,并且通過serializer返回SOAP消息和ASP的Response對象。

  因為Flash的XML解析器不能處理XML標記的名稱空間,所以,需要使用單一的結構。

  一般的SOAP主體是這樣的:

<SOAPSDK1:AddResponse xmlns:SOAPSDK1="uri:Calc">
?。糞OAPSDK1:Answer>12</SOAPSDK1:Answer>
</SOAPSDK1:Response>
  但是,由于前述的理由,我們不能直接使用這樣的結構。而應該用下面這樣Flash支持的語法形式。這種形式包容了同樣的數據,只是沒有SOAPSDK的名字空間和標記前綴而已。

<AddResponse>
?。糀nswer>12</Answer>
</AddResponse>
  做這些改變,首先應該從這個模塊的代碼前端的聲明部分去掉下面這行:


Const CALC_NS = "uri:Calc"
  然后,要告訴SOAP Serializer不使用特定的名字空間。把這段代碼:

...
Serializer.startBody
Serializer.startElement MethodName & "Response", CALC_NS
Serializer.startElement "Answer", CALC_NS
...
  修改成這樣:

...
Serializer.startBody
Serializer.startElement MethodName & "Response"
Serializer.startElement "Answer"
...
  好了,現在可以編譯DLL了。然后IIS服務器上注冊它。(在控制臺或是run對話框中使用regsvr32.exe命令,形式是:regsvr32 DLL所在路徑/DLL文件名)
  第三步:建立Flash界面

  前面的兩個步驟完成后,就我們繼續建立客戶端的Flash界面。

  首先,在Flash中建立一個簡單的計算器界面。這個界面和普通的數字計算器很相似--用戶在鍵盤上輸入數值和計算方法,計算器顯示出計算結果。為了能夠進行計算,在Flash中需要有一些全局變量來存放數值和計算方法。當用戶點擊計算器的按鈕時,更新這些變量的值。我們用三個root-level變量存放了這些數據:

  _root.calcValue 存放計算器顯示的數值

  _root.Operator 存放選擇了的計算方法

  _root.lastValue 存放上一次運算的結果

  然后需要建立各種與用戶交互的按鈕,比如0~9的數字,各種運算符,小數點,等號等等。除此之外,還需要建立一個文本框,以便顯示計算結果。在Flash中,通過動態文本(Dynamic Text)把變量綁定到文本框上,這個文本框中將顯示出變量的值,并隨變量的變化而刷新。(方法是:從text options面版中選擇Dynamic Text,設置bind variable為 _root.calcValue。)

  下一步,為每個按鈕建立相應的Action:當數字按鈕被按下的時候,更新變量 _root.calcValue 的值,當運算符按鈕被按下時,設置變量_root.operator的值。這個值要和服務器端的SOAPCalc 組件所需要的值保持一致。(本例中是"Add", "Subtract", Multiply", 或 "Divide")同樣在這個Action中,添加代碼用來把當前的計算結果保存到變量_root.lastValue中。運算符按鈕的Action中應該有這樣的代碼:

on (release) {
 // operator應該是 "Add", "Subtract", Multiply", 或 "Divide"
 _root.operator = "Add";
 _root.lastValue = _root.calcValue;
 ...
}
  下面,添加"="按鈕的Action,當用戶按下這個按鈕的時候,將調用函數發送SOAP消息,進行計算:

on (release) {
 _root.calculate(_root.operator, _root.lastValue, _root.calcValue);
}
  在Flash影片的root level中的新層中,建立一個所有函數都將用到的Action。在這個Action中,建立一個函數calculate()處理SOAP請求和回應。函數calculate()的作用是向服務器發送運算所需要的兩個數和運算符。

  其形式是:

function calculate(operator, a, b) {
...
}
  具體的代碼將在下面的部分繼續填充。
  第四步:實現SOAP消息

  其實這樣功能的計算器使用Flash集成的腳本語言ActionScript就可以輕松完成,但是我們這里演示的是SOAP計算器,所以需要利用服務器完成所有的計算請求。Flash5能夠發送和接受XML文檔,而SOAP消息也是普通的XML文檔,所以我們可以使用Flash集成的XML對象來建立和解析SOAP消息。

  為了使建立Flash/SOAP應用程序的過程更為簡單,你可以下載Media Revolution所開發的Flash SOAP組件。它是免費的。這個組件通過封裝XML操作而簡化了在Flash中發送和接受SOAP消息的操作??梢詮膆ttp://software.mrev.com/soap.asp下載這個組件。使用方法是把它復制到Flash影片所在目錄,在root level加入一個名為SOAP的影片夾子,并加入如下代碼:

loadMovie ("SOAP.swf", "_root.SOAP");
  在函數calculate()中使用這個SOAP對象。首先,創建一個新的SOAP對象。注重名稱"SOAP"要和上一步加入的SOAP組件名稱相同。

  為這個對象的onLoad屬性分配一個函數名。這個函數在SOAP對象接受或處理SOAP回應時運行。(函數displayCalcResult將在后面定義)。

  代碼如下:

function calculate (operator, a, b) {
 ...
 var SOAPCalc = new SOAP.SOAP();
 SOAPCalc.onLoad = displayCalcResult;
...
}
  然后,使用內建的SOAP方法createMethod() 和 addParameter() 定義遠端過程調用的類型。SOAP對象假定服務器應用程序期望的節點和調用的方法同名。并且返回一個名稱為[方法名]Response的節點。 (比如 AddResponse)。
代碼如下:

function calculate (operator, a, b) {
 ...
 SOAPCalc.createMethod(operator);
 SOAPCalc.addParameter("A", a);
 SOAPCalc.addParameter("B", b);
 ...
}
  最后,使用SOAP對象的方法send(),把請求發送到前面建立的SOAP監聽器的地址上。


function calculate (operator, a, b) {
...
SOAPCalc.send
("http://localhost/SOAPCalc/default.asp");
...
}
  注:因為安全問題,Flash播放器限制SOAP請求和影片在一個子域中。Macromedia將發布一個修正版的播放器,以便解決這一問題。

  當SOAP對象收到和解析服務器發回的回應,onLoad事件將被觸發。通過前面分配給onLoad屬性的函數,可以很輕易的存取服務器的回應信息。比如:

function displayCalcResult () {
 _root.calcValue = this.Response.Answer;
}
  SOAP Response對象中的[函數名]Response.Answer節點中存放的就是計算結果。

  回應的SOAP消息如下所示:

<SOAP-ENV:Envelope xmlns:
 SOAP-ENV=/"http://schemas.xmlsoap.org/soap/envelope//">
?。糞OAP-ENV:Body>
  <AddResponse>
  ?。糀nswer>10</Answer>
  </AddResponse>
?。?SOAP-ENV:Body>
</SOAP-ENV:Envelope>
  上面的displayCalcResult()遠程操作返回的值存放在root-level的變量 _root.calcValue中,這樣動態文本框將自動顯示其值。

  這些都做好以后,你就擁有了一個Flash SOAP計算器了。完整的演示可參見:http://software.mrev.com/demo/soap

  關于錯誤處理,請解析<Fault>節點的子節點<faultcode>和其他節點,它們包含了錯誤信息:

<?xml version="1.0"?>
<SOAP-ENV:Envelope>
 <SOAP-ENV:Body>
 ?。糞OAP-ENV:Fault>
  ?。糵aultcode>Server</faultcode>
  ?。糵aultstring>
    Parameter missing: B
   </faultstring>
 ?。?SOAP-ENV:Fault>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
  通過Flash使用SOAP傳遞信息,把用戶界面和數據分離,是一個不錯的主意。這樣客戶端可以得到比以往的Web界面更豐富的多媒體界面。通過在Flash函數內封裝SOAP請求和SOAP組件,大大降低了開發難度,甚至可以讓對XML和SOAP不很熟悉的Flash開發人員輕松的應用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情视频播放| 国产精品视频大全| 亚洲精品免费一区二区三区| 亚洲精品在线不卡| 久久久久久久999精品视频| 久久视频免费观看| 欧美日韩中文字幕| 国产精品久久久av| 国产成人啪精品视频免费网| 青草青草久热精品视频在线网站| 精品久久久国产精品999| 亚洲直播在线一区| 日韩视频免费大全中文字幕| 麻豆国产精品va在线观看不卡| 日韩成人在线视频网站| 欧美激情亚洲自拍| 精品久久香蕉国产线看观看亚洲| 日本亚洲欧洲色α| 欧美午夜久久久| 亚洲国产精彩中文乱码av| 欧美日韩在线影院| 亚洲人成网站999久久久综合| 欧美一区第一页| 欧美另类精品xxxx孕妇| 欧美日韩在线一区| www.国产一区| 热久久美女精品天天吊色| 国产欧美在线看| 日韩免费观看高清| 欧美日韩亚洲精品一区二区三区| 7m第一福利500精品视频| 国产精品美女免费看| 久久不射热爱视频精品| 日韩性生活视频| 大胆人体色综合| 隔壁老王国产在线精品| 欧美日韩午夜视频在线观看| 亚洲综合中文字幕68页| 日韩人体视频一二区| 久久国产加勒比精品无码| 96sao精品视频在线观看| 亚洲va国产va天堂va久久| 欧美日韩免费观看中文| 亚洲第一页中文字幕| 久久精品国产亚洲精品2020| 91高清视频免费观看| 亚洲韩国青草视频| 欧美一区亚洲一区| 精品久久久久人成| 久久人91精品久久久久久不卡| 欧美最猛黑人xxxx黑人猛叫黄| 国产成人在线视频| 亚洲人成自拍网站| 国产精品r级在线| 91精品视频在线| 91wwwcom在线观看| 欧洲午夜精品久久久| 国产精品高潮粉嫩av| 久久手机免费视频| www.99久久热国产日韩欧美.com| 久久久久久久久久久久久久久久久久av| 国产suv精品一区二区| 久久亚洲精品网站| 亚洲欧美在线播放| 欧美丝袜一区二区| 久久中国妇女中文字幕| 日韩精品999| 4k岛国日韩精品**专区| 亚洲第一二三四五区| 日韩欧美极品在线观看| 国产欧美精品一区二区三区介绍| 在线观看国产欧美| 国产欧美在线看| 久久成人av网站| 国产精品一区二区久久精品| 亚洲男人的天堂在线播放| 国产在线观看不卡| 日韩在线视频观看正片免费网站| 人妖精品videosex性欧美| 国产精品青青在线观看爽香蕉| 国产精品一区二区三区免费视频| 亚洲精品久久久久中文字幕欢迎你| 欧美激情xxxx性bbbb| 欧美做爰性生交视频| 日韩中文字幕免费视频| 美女视频黄免费的亚洲男人天堂| 综合136福利视频在线| 8x海外华人永久免费日韩内陆视频| 日韩小视频在线观看| 伊人伊成久久人综合网小说| 亚洲摸下面视频| 亚洲精品丝袜日韩| 日本高清视频精品| 色琪琪综合男人的天堂aⅴ视频| 中文字幕日韩精品在线| 亚洲女性裸体视频| 中文字幕视频一区二区在线有码| 在线日韩欧美视频| 热门国产精品亚洲第一区在线| 亚洲自拍高清视频网站| 欧洲精品在线视频| 欧美性受xxx| 欧美猛少妇色xxxxx| 久久精品国产99国产精品澳门| 欧美性xxxx极品高清hd直播| 亚洲欧美福利视频| 91社影院在线观看| 国产一区二区三区免费视频| 亚洲精品少妇网址| 国产美女高潮久久白浆| 欧美性极品xxxx做受| 亚洲精品电影网在线观看| 青草青草久热精品视频在线网站| 久久av在线播放| 亚洲大胆美女视频| 国产女人精品视频| 欧美劲爆第一页| 海角国产乱辈乱精品视频| 欧美性做爰毛片| 久久久久国产精品一区| 精品丝袜一区二区三区| 国产精品视频久久久| 国语自产精品视频在免费| 欧美精品在线免费播放| 亚洲美女福利视频网站| 91精品久久久久久综合乱菊| 九色91av视频| 中文字幕欧美日韩在线| 欧美有码在线观看| 中文字幕国产日韩| 91久久中文字幕| 一个人www欧美| 国模精品视频一区二区| 亚洲男人第一av网站| 精品精品国产国产自在线| 欧美精品在线观看91| 久久久久久久一区二区三区| 在线视频欧美日韩精品| 国产精品偷伦免费视频观看的| 国产v综合ⅴ日韩v欧美大片| 欧美www在线| 久久成人18免费网站| 日韩成人在线播放| 91在线观看免费网站| 国产精品羞羞答答| 96pao国产成视频永久免费| 91精品国产色综合久久不卡98| 亚洲国产精品久久91精品| 在线电影av不卡网址| 久久综合免费视频| 欧美在线一级va免费观看| 亚洲精品欧美极品| yw.139尤物在线精品视频| 日韩电视剧免费观看网站| 国产精品美女在线| 亚洲激情视频在线播放| 欧美一乱一性一交一视频| 性欧美xxxx交| 国产精品久久久久久久7电影| 亚洲美女又黄又爽在线观看| 国产精品亚洲第一区| 久久久www成人免费精品张筱雨| 国产99久久精品一区二区| 亚洲国产欧美一区二区三区久久|