|
[[Flash MX Professional 2004:http://www.macromedia.com/jp/software/flash/flashpro/]]を使えば、FlashコンテンツからSOAP Webサービスを直接利用することができます。 スクリプトコードで実現する方法と、GUIで設定する方法がありますが、動作基盤は同じようです。 #contents #br ** [[WebServiceクラス:http://livedocs.macromedia.com/flash/mx2004/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Flash_MX_2004_Documentation&file=04_co905.htm]]を使ってActionScriptだけで実現する方法 こちらの方が、より細かい設定ができるようです。[[SOAPヘッダを追加したり:http://www.flash-db.com/Board/index.php?board=9;action=display;threadid=6647;start=]]もできそうです。プログラマには、こっちの方がわかりやすいかもしれませんね。 サンプルコード(Buttonのclickイベントでの記述例) on (click) { import mx.services.*; // WSDLを指定してWebServiceクラスをインスタンス化 var service = new WebService("http://localhost:8080/fortune/services/Test?wsdl"); // メソッドを呼び出す。戻り値はPendingCallクラスとなる。 resultObj = service.getFortune(_parent.birth_ti.text); // onResultイベントハンドラに結果取得後の処理を記述する。 resultObj.onResult = function(results) { _parent.group_label.text = results.rokkoGroup; _parent.content_txt.text = ""; for (var i = 0; i < results.items.length; i++) { _parent.content_txt.text += "[[" + results.items[i].name + "]] " + results.items[i].content + "\n\n"; } } // onFaultイベントハンドラに結果取得失敗時の処理を記述する。 resultObj.onFault = function(fault) { trace(fault.faultCode + "," + fault.faultstring); } } WebServiceクラスのコンストラクタの第2引数にLogクラスのインスタンスを指定すると、Webサービスの詳細なログが出力されるようになります。デバッグ用ですね。 serviceLog = new Log(Log.VERBOSE); serviceLog.onLog = function(txt) { trace(txt); } var service = new WebService("http://jomora.bne.jp:8080/Quiz/QuizService.asmx?wsdl", serviceLog); -参考. [[Using the Flash MX 2004 Web Service Classes(The Flash-DB):http://www.flash-db.com/services/tutorials/mxclasses/mxwebservices.php?page=1]] -BASIC認証付きのWebサービスにアクセスしたいときに、HTTPのAuthorizationヘッダを付加するにはどうすればよいのでしょうかね?([[hint1:http://www.macromedia.com/cfusion/webforums/forum/messageview.cfm?catid=294&threadid=789039]], [[BASE64ライブラリ:http://www.fsozai.com/AS/library/base64.html]]) ** WebServiceComponentクラスを使ってGUIで設定する方法 こちらはマウスだけで設定できちゃうので、デザイナさん向けなのかな? + 「ウィンドウ」「開発パネル」「Webサービス」を選択して、Webサービスパネルを開きます。 #ref(Webサービスパネル1.PNG); + 左の青いアイコンをクリックして、Webサービスの定義を開き、WebサービスのWSDLを返すURLを入力し、「OK」ボタンを押します。 #ref(Webサービスの定義.PNG); + すると、Webサービスコンポーネントが登録されます。 #ref(Webサービスパネル2.PNG); + 利用したいメソッドを選択し、右クリックして、「メソッド呼び出しの追加」を選択します。 #ref(Webサービスパネル3.PNG); + すると、フォームにWebサービスコンポーネントのインスタンスが張り付きます。 #ref(Webサービスコンポーネント.PNG); + ''プロパティパネルでインスタンス名を入力''した後に、コンポーネントインスペクタパネルのバインディングタブでバインディングの追加を行います。これは要するに、''Webサービスの引数や戻り値を、Flashフォーム上のオブジェクトと関連付ける''作業です。 #ref(コンポーネントインスペクタ1.PNG); + バインディング項目を追加したら、その項目毎に「bound to」プロパティを設定して、関連付けを行います。 #ref(バインド.PNG); + この作業をWebサービスでやり取りするパラメータの数だけ繰り返します。 #ref(コンポーネントインスペクタ2.PNG); + 最後に、''Webサービスを呼び出したいActionScriptコードにカーソルを置いた後''、ビヘイビアパネルのビヘイビアの追加ボタンから「Data」「Trigger Data Source」を選んで、 #ref(ビヘイビア.PNG); + 呼び出したいWebサービスコンポーネントを選択すると、 #ref(Trigger_Data_Source.PNG); + アクションパネルにWebサービスを呼び出すコードが出力されます。 // Trigger Data Source Behavior // Macromedia 2003 this._parent.test_wsc.trigger(); * [番外] 他ドメインのFlashファイルからのアクセスを許可する。 デフォルトでは、Flashコンポーネントが通信できるのは、その[[SWFファイルの配布ホストだけに限定:http://multi.moja.jp/outline/realtime.html]]されます。他のホストのFlashからの通信を受信許可するには、Webサーバのコンテンツルートに crossdomain.xml を配置するらしい… <?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="jomora.bne.jp" secure="false" /> <allow-access-from domain="*.bne.jp" secure="false" /> </cross-domain-policy>