純粋なAS 3の下でWebServiceメソッドのまとめにアクセスする


今日は純AS 3でWebServiceにアクセスする方法を紹介します...Flexがこのクラスを持っていると言ったらまたはサードパーティのクラスがあります.それは下を見続ける必要はありません.「WebServiceクラスの使い方」を紹介していないので..必要な場合は、自分で結果を検索してください.あるいは自分で助けを見ます..ご協力ありがとうございます.WebServiceの概念についてはあまり言いません.わからないGoogleやBaiduはすぐにいいです.今日は以下のWebServiceで一連のテストを行います.wsは指定された携帯電話番号の帰属を返すことができます.http://www.webxml.com.cn/によって提供される.このサイトには実用的なwsがたくさんあります.http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx上のアドレスを開いてページを見て、wsの2つの方法を紹介しました.
getDatabaseInfo
国内携帯電話番号帰属地データベース情報取得
入力パラメータ:なし;
データを返します:1 D文字列配列(省都市レコード数).
getMobileCodeInfo
国内の携帯電話番号の帰属地の省、地区と携帯電話カードのタイプの情報を獲得します
入力パラメータ:mobileCode=文字列(携帯電話番号、最低上位7桁)、userID=文字列(ビジネスユーザーID)無料ユーザーは空の文字列;
データを返す:文字列(携帯電話番号:省都市携帯電話カードタイプ).
以下のテストはgetMobileCodeInfoを例にして行います.メソッド名getMobileCodeInfo、2つのパラメータが必要です..1つはmobileCode、すなわち携帯電話番号であり、以下の例はいずれも1380138000、2つ目はuserIDを用いる、空にすればよい方法1:GETの一部のwsがGET方法をサポートする.このタイプのwsについて.私たちは直接get方式を使ってデータフォーマットを取得することができます:WSアドレス/方法?パラメータ=値[&パラメータ=値...]上のように..私たちは直接このようなURLアドレスをつなぎます:http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13800138000&userID=直接アクセスすることができます..ブラウザを開くとAS 3に表示されます..URLLoaderを使用してロードします.コードは次のとおりです.
 
package {
02.    import flash.display.Sprite;
03.    import flash.events.Event;
04.    import flash.net.URLLoader;
05.    import flash.net.URLRequest;
06.  
07.    public class WSExample extends Sprite
08.    {
09.          
10.        public function WSExample()
11.        {
12.            init();
13.        }
14.        private function init():void
15.        {
16.            var loader:URLLoader = new URLLoader()
17.            loader.addEventListener(Event.COMPLETE,complete);
18.            loader.load(new URLRequest("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode=13800138000&;userID="))
19.        }
20.        private function complete(e:Event):void
21.        {
22.            trace(XML(e.target.data))//13800138000:              
23.        }
24.    }
25.}
 

 
方法2:POSTこの方法は上のGETと同じです..一部のwsのみサポート..呼び出し方法は基本的に上のGETと同じです..メソッドのパラメータをPOST形式でAS 3に送信するだけである.私たちはやはりURLLoaderを使っています.コードは次のとおりです.
 
package {
02.    import flash.display.Sprite;
03.    import flash.events.Event;
04.    import flash.net.URLLoader;
05.    import flash.net.URLRequest;
06.    import flash.net.URLRequestMethod;
07.  
08.    public class WSExample2 extends Sprite
09.    {
10.          
11.        public function WSExample2()
12.        {
13.            init();
14.        }
15.          
16.        private function init():void
17.        {
18.            var loader:URLLoader = new URLLoader()
19.            loader.addEventListener(Event.COMPLETE,complete);
20.              
21.            var request:URLRequest = new URLRequest("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo")
22.            request.method = URLRequestMethod.POST;
23.            request.data = "mobileCode=13800138000&userID="
24.            loader.load(request)
25.        }
26.        private function complete(e:Event):void
27.        {
28.            trace(XML(e.target.data))//13800138000:              
29.        }
30.    }
31.}
 

 
メソッド3:このメソッドに一般的にアクセスする..従来の方法でWSにアクセスし、すべてのWSが適用されます.PS:しばらくはhttp://www.webxml.com.cn/のWSはテストをします..(バックグラウンドが分からないので、自分でWSテストを書くことができません.)皆さんが問題を発見したら..回答可指摘..まず...FLEXのWSクラスを使用して、上記のWSを呼び出すプログラムを書きます.プログラムでデータをキャプチャ..まずHeadの情報は..
 
(Request-Line)  POST /WebServices/MobileCodeWS.asmx HTTP/1.1
02.Accept  */*
03.Accept-Encoding  gzip, deflate
04.Accept-Language  zh-CN
05.Cache-Control  no-cache
06.Connection  Keep-Alive
07.Content-Length  375
08.Content-Type  text/xml; charset=utf-8
09.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
10.Host  www.webxml.com.cn
11.SOAPAction  "http://WebXml.com.cn/getMobileCodeInfo"
12.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)
13.x-flash-version  10,0,22,87
 
POSTコンテンツは
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2.  <SOAP-ENV:Body>
3.    <tns:getMobileCodeInfo xmlns:tns="http://WebXml.com.cn/">
4.      <tns:mobileCode>13800138000</tns:mobileCode>
5.    </tns:getMobileCodeInfo>
6.  </SOAP-ENV:Body>
 
POSTの内容を分析する..XML形式の文字列リクエストが見つかりました..
書式

getMobileCodeInfoをメソッド名とする
mobileCodeはパラメータ
1380138000はmobileCodeの値です
http://WebXml.com.cn/このwsのNamespace
tnsは任意の名前です..ここではtns(targetNamespace略記?)
フォーマットがわかったら..私たちはAS 3でこれらのデータをつなぐことができます.そしてWSにアクセス
コードは次のとおりです.
package {
02.    import flash.display.Sprite;
03.    import flash.events.Event;
04.    import flash.net.URLLoader;
05.    import flash.net.URLRequest;
06.    import flash.net.URLRequestHeader;
07.    import flash.net.URLRequestMethod;
08.  
09.    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.}
 
方法4:WebServiceクラスのカスタマイズ
方法3..WebServiceのアクセスの実現原理を知っています.
でも実現するのは面倒です.メソッド名を手動で書く必要があります..パラメータ名..ns等
実はこれらの情報..すべてwsの中で説明があります..
FlexのクラスとサードパーティのWebServiceクラスも異なる手段で..
最終生成要求のXML..
WSへのアクセスを容易にする..
FlexのWebServiceを例に..
まず住所にアクセスしますか?WSDL
のように
http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
取得方法および対応するパラメータ名..(types.schema.elementは対応する方法であり、各elementの下にパラメータがある)
ns(types.schemaの@targetNamespace?)を取得します.
そして、対応するメソッドを呼び出すと、リクエスト内容とrequestHeadersのSOAPActionを自動的に接続できます.
再アクセス
中にはflashを継承することもできます.utils.Proxy..
callPropertyを書き換えます.
FlexのWebServiceのような
webService.メソッド名(...パラメータ)のような呼び出しフォーマット..
詳細パラメータutils.Proxy...