AS3操作WebService

一世执手 提交于 2020-02-29 23:17:17

AS3操作WebService

以在线天气预报为例

地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

方法:getWeatherbyCityName

一、直接操作

  1. GET
    1. import flash.net.URLLoader;
    2. import flash.net.URLRequest;
    3.  
    4. var loader:URLLoader = new URLLoader(new URLRequest("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName=上海"));
    5. loader.addEventListener(Event.COMPLETE, completeHandler);
    6.  
    7. function completeHandler(ev:Event):void{
    8. trace(loader.data);
    9. }
  2. POST
    1. import flash.net.URLLoader;
    2. import flash.net.URLRequest;
    3. import flash.net.URLVariables;
    4.  
    5. var vars:URLVariables = new URLVariables();
    6.     vars.theCityName = "上海";
    7.  
    8. var request:URLRequest = new URLRequest("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName");
    9.     request.method = "post";
    10.     request.data = vars;
    11.  
    12. var loader:URLLoader = new URLLoader(request);
    13.     loader.addEventListener(Event.COMPLETE, completeHandler);
    14.    
    15. function completeHandler(ev:Event):void{
    16.     trace(loader.data);
    17. }
  3. 常规访问(参考网上)

    此方法中..我们使用常规的方法来访问WS,所有的WS都适用..
    PS:暂时只有 http://www.webxml.com.cn/ 的WS做测试..(不懂后台..所以无法自己写WS测试..),如各位发现问题..可回复指出..

    首先..我们使用FLEX中的WS类写一个调用上述WS的程序..然后通过程序截获数据..
    首先Head中信息为..
    (Request-Line) POST /WebServices/MobileCodeWS.asmx HTTP/1.1
    Accept */*
    Accept-Encoding gzip, deflate
    Accept-Language zh-CN
    Cache-Control no-cache
    Connection Keep-Alive
    Content-Length 375
    Content-Type text/xml; charset=utf-8
    Cookie WebXmlCookies=WeatherProvince=31124&WeatherCity=2419; ASP.NET_SessionId=qvrl3z45fqbngw55mdjysp3m; __utma=89798685.2765186755903630000.1237825717.1237861008.1237903668.4; __utmz=89798685.1237825717.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=89798685.1.10.1237903668; __utmc=89798685
    Host www.webxml.com.cn
    SOAPAction “http://WebXml.com.cn/getMobileCodeInfo”
    User-Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; QQDownload 1.7; TencentTraveler 4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
    x-flash-version 10,0,22,87
    POST内容为



    13800138000

    分析其中POST内容..发现为一个XML格式字符串请求..
    格式为
    其中
    getMobileCodeInfo为方法名
    mobileCode为参数
    13800138000为mobileCode的值

    http://WebXml.com.cn/为该ws的Namespace

    tns为任意名字..这里为tns(targetNamespace简写?)

    知道格式后..我们就可以开始在AS3里拼接这些数据..然后访问WS

    1. package {
    2.     import flash.display.Sprite;
    3.     import flash.events.Event;
    4.     import flash.net.URLLoader;
    5.     import flash.net.URLRequest;
    6.     import flash.net.URLRequestHeader;
    7.     import flash.net.URLRequestMethod;
    8.  
    9.     public class WSExample3 extends Sprite
    10.     {
    11.        
    12.         public function WSExample3()
    13.         {
    14.             init();
    15.         }
    16.        
    17.         private function init():void
    18.         {
    19.             //拼接XML
    20.             var s:XML = <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    21.                             <SOAP:Body>
    22.                                 <tns:getMobileCodeInfo xmlns:tns="http://WebXml.com.cn/">
    23.                                     <tns:mobileCode>13800138000</tns:mobileCode>
    24.                                     <tns:userID></tns:userID>
    25.                                 </tns:getMobileCodeInfo>
    26.                             </SOAP:Body>
    27.                         </SOAP:Envelope>
    28.             //注意tns,getMobileCodeInfo,mobileCode,userID
    29.            
    30.            
    31.             var request:URLRequest = new URLRequest("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx")
    32.             request.method = URLRequestMethod.POST;
    33.            
    34.             //添加requestHeaders,经测试和网上资料,只添加Content-Type和SOAPAction即可
    35.             //Content-Type发送内容的格式..
    36.             //SOAPAction由该ws的Namespace+方法组成..
    37.             var headers:Array = [];
    38.             headers.push(new URLRequestHeader("Content-Type", "text/xml; charset=utf-8"));
    39.             headers.push(new URLRequestHeader("SOAPAction", "http://WebXml.com.cn/getMobileCodeInfo"));
    40.             request.requestHeaders = headers;
    41.  
    42.             //指定请求内容
    43.             request.data = s.toXMLString();
    44.            
    45.             var loader:URLLoader = new URLLoader();
    46.             loader.addEventListener("complete", complete);
    47.             loader.load(request)
    48.         }
    49.         private function complete(e:Event):void
    50.         {
    51.             trace(XML(e.target.data))
    52.             //输出:
    53.             //<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    54.             //  <soap:Body>
    55.             //    <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
    56.             //      <getMobileCodeInfoResult>13800138000:北京 北京 北京移动全球通卡</getMobileCodeInfoResult>
    57.             //    </getMobileCodeInfoResponse>
    58.             //  </soap:Body>
    59.             //</soap:Envelope>
    60.             //其中getMobileCodeInfoResult为我们需要的结果
    61.         }
    62.     }
    63. }

二、使用第三方类库

  1. Roading的WebService类
    1. import net.roading.net.WebService;
    2. //
    3. import flash.events.EventDispatcher;
    4. //
    5. var ws:WebService = new WebService("http://www.roading.net/WebService/test.asmx");
    6. //var ws:WebService = new WebService("http://www.wapit.cn/WebServices/Weather.asmx");
    7. //var ws:WebService = new WebService("http://webservice.k-zone.cn/URLToHtmlService/URLToHtmlService.asmx");
    8. ws.onLoad = function(e)
    9. {
    10.  trace(this.getWsInfo());
    11. }
    12. ws.onError = function(e)
    13. {
    14.  trace(e.toString());
    15. }
    16. //
    17. var sr:EventDispatcher = ws.call("getAge",'122',123);
    18. sr.addEventListener("complete", completeHandler);
    19. sr.addEventListener("error", errorHandler);
    20. function errorHandler(e)
    21. {
    22.  trace('error');
    23.  for(var i in e.info)
    24.  trace(i,"=======",e.info[i]);
    25. }
    26. function completeHandler(e)
    27. {
    28.  trace("-------------------------");
    29.  trace("getAge result:");
    30.  trace(e.xml);
    31.  trace(e.data);
    32. }
    33. //
    34. var sr1:EventDispatcher = ws.call("getTime");
    35. sr1.addEventListener("complete", sr1completeHandler);
    36. function sr1completeHandler(e)
    37. {
    38.  trace("-------------------------");
    39.  trace("getTime result:");
    40.  trace(e.xml);
    41.  trace(e.data);
    42. }
    43. //
    44. var sr2:EventDispatcher = ws.call("say","i am roading","aha");
    45. sr2.addEventListener("complete", sr2completeHandler);
    46. function sr2completeHandler(e)
    47. {
    48.  trace("-------------------------");
    49.  trace("say result:");
    50.  trace(e.xml);
    51.  trace(e.data);
    52. }
  2. SnowMan的WebServices类
    1. import com.roading.net.WebServices;
    2.  
    3. function analyseCompleteHandler(e){ 
    4.     trace("解析完成: ", e.eventInfo.target, "所有方法如下: ");
    5.     for(var i in e.eventInfo.methods) 
    6.         trace("方法名:" + i + " 参数:(" + e.eventInfo.methods[i] + ")");
    7.  
    8.     //解析完成后,可以调用方法了
    9.     e.target.load("GetUserList", "jinguoxing");
    10. } 
    11.  
    12. function analyseErrorHandler(e){ 
    13.     trace("解析出错: ", e.eventInfo.target, e.eventInfo.info);
    14. } 
    15.  
    16. function wsCallCompleteHandler(e){ 
    17.     trace("调用完成: ", e.eventInfo.target, e.eventInfo.methodName);
    18.  
    19.     //e.eventInfo.data为返回的数据,可将根据e.eventInfo.methodName(调用的方法名)进一步分析数据.
    20.     trace("返回的数据是: ", e.eventInfo.data);
    21.     txt.text = e.eventInfo.data;
    22.     //trace("返回的数据是: ", new XML(e.eventInfo.data));
    23. } 
    24.  
    25. function wsCallErrorHandler(e){ 
    26.     trace("调用方法出错: ", e.eventInfo.target, e.eventInfo.info);
    27. } 
    28.  
    29. //两个步骤,首先解析WebServie,然后才可以调用WebServie方法
    30. var ws = new WebServices("http://192.168.1.218:156/list.asmx");
    31.     ws.addEventListener("wsAnalyseComplete", analyseCompleteHandler);
    32.     ws.addEventListener("wsAnalyseError", analyseErrorHandler);
    33.     ws.addEventListener("wsCallComplete", wsCallCompleteHandler);
    34.     ws.addEventListener("wsCallError", wsCallErrorHandler);
  3. 其他的MyWebService类
    1. import com.roading.net.MyWebService;
    2.  
    3. var ws=new MyWebService("http://192.168.1.200:156/list.asmx");
    4.     ws.load("GetUserList","ency=jinguoxing");   
    5.     ws.addEventListener("callComplete", wsCompleteHandler);
    6.     ws.addEventListener("callError", wsIOErrorHandler);
    7.  
    8. function wsIOErrorHandler(e):void {
    9.     trace(e.eventInfo.method);
    10.     e.MyEventerGC();
    11. }
    12.  
    13. function wsCompleteHandler(e):void {
    14.     //trace("--------------------")
    15.     //trace(e.eventInfo.method)
    16.     //trace(e.eventInfo.data)
    17.     //trace("--------------------")
    18.     //var listXML:XML=XML(e.eventInfo.data);
    19.     trace(e.eventInfo.data);
    20.     txt.text = e.eventInfo.data;
    21.     e.MyEventerGC();
    22. }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!