我正在使用web2py(v1.63)和Flex 3. web2py v1.61引入了@service装饰器,它允许您使用@ service.amfrpc标记控制器功能。然后,您可以使用http://..../app/default/call/amfrpc/[function]
远程调用该功能。见http://www.web2py.com/examples/default/tools#services。有没有人举例说明如何设置Flex 3来调用这样的函数?这是我到目前为止所尝试的:
<mx:RemoteObject id="myRemote" destination="amfrpc" source="amfrpc"
endpoint="http://{mysite}/{myapp}/default/call/amfrpc/">
<mx:method name="getContacts"
result="show_results(event)"
fault="on_fault(event)" />
</mx:RemoteObject>
在我的场景中,目标和源属性的值应该是多少?我已经阅读了几篇关于非web2py实现的文章,例如http://corlan.org/2008/10/10/flex-and-php-remoting-with-amfphp/,但它们使用的是... / gateway.php文件,而不是直接映射到函数的URI。
或者,我已经能够使用flash.net.NetConnection成功调用我的远程函数,但我发现的大部分文档都认为这是使用Flex 3之前的旧方法。见http://pyamf.org/wiki/HelloWorld/Flex。这是NetConnection代码:
gateway = new NetConnection();
gateway.connect("http://{mysite}/{myapp}/default/call/amfrpc/");
resp = new Responder(show_results, on_fault);
gateway.call("getContacts", resp);
-Rob
答案 0 :(得分:1)
我还没有找到一种方法将RemoteObject与@ service.amfrpc装饰器一起使用。但是,我可以使用NetConnection(类似于我最初发布的)使用较旧的ActionScript代码,并将其与web2py端的@service.amfrpc函数配对。这似乎工作正常。您希望在我最初共享的NetConnection代码中更改的一件事是为连接状态添加事件侦听器。如果你觉得有需要,你可以添加更多的监听器,但我发现NetStatusEvent是必须的。如果服务器没有响应,将触发此状态。您的连接设置如下:
gateway = new NetConnection();
gateway.addEventListener(NetStatusEvent.NET_STATUS, gateway_status);
gateway.connect("http://127.0.0.1:8000/robs_amf/default/call/amfrpc/");
resp = new Responder(show_results, on_fault);
gateway.call("getContacts", resp);
-Rob