使用mx:RemoteObject与web2py的@service.amfrpc装饰器
我正在使用web2py(版本1.63)和Flex 3。web2py的1.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之前的AMF实现方式。你可以查看这个链接了解更多: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
1 个回答
我没有找到使用@service.amfrpc装饰器来配合RemoteObject的方法。不过,我可以用旧版的ActionScript代码,使用NetConnection(就像我最开始发的那样),然后在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