Python(GoogleAppEngine)×AMF×Flex連携

cp -R /usr/local/google_appengine/new_project_template MyProject
cp -R PyAMF-0.5.1/pyamf MyProject
cd MyProject
ls -l
    • こんな感じになる
+ MyProject
  - app.yaml
  - index.yaml
  - main.py
  - pyamf
application: pyamf
version: 1
runtime: python
api_version: 1

- url: /.*
  script: main.py
  • main.py
import logging
import wsgiref.handlers

from pyamf.remoting.gateway.wsgi import WSGIGateway


def echo(data):
    return data


def main():
    services = {
        // Flexで呼ぶときのサービス名
        'myservice.echo': echo,
    }
    // CGI上、お決まり
    gateway = WSGIGateway(services, logger=logging, debug=True)
    wsgiref.handlers.CGIHandler().run(gateway)


if __name__ == '__main__':
    main()
  • 実行
./dev_appserver.py --debug --address=localhost --port=8080 MyProject/
※俺の場合、
   # 400 Bad Request
   # To access this PyAMF gateway you must use POST requests (GET received)
  ってエラーが出た
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import flash.net.*;

            // データ送信
			private function doRequest():void{
				// レスポンダーを作成
				var responder:Responder = new Responder(onSuccess, onFault);
				// コネクションの作成
				var connection:NetConnection = new NetConnection();
				
				// コネクト
				//connection.connect("http://pyamf.appspot.com/");  // GAEにアップしてたら 
				connection.connect("http://localhost:8080/");

				connection.objectEncoding = ObjectEncoding.AMF3;

				// ServiceクラスのreturnNameメソッドを呼び出す
				connection.call("myservice.echo", responder, nameText.text);
			}
			
			// データ取得成功
			private function onSuccess(e:*):void{
				// 返却値をAlertで表示
				Alert.show(e.toString());
			}
			
			// データ取得失敗
			private function onFault(e:*):void{
				Alert.show("通信失敗");
			}
			
			
		]]>
	</mx:Script>
	<mx:TextInput x="10" y="36" id="nameText" />
	<mx:Button label="Submit" id="idTest" click="doRequest()" x="10" y="66"/>
	<mx:Label x="10" y="10" text="name" color="#FFFFFF"/>
</mx:Application>