将 mx:RemoteObject 与 web2py 的 @service.amfrpc 装饰器一起使用

发布于 2024-07-21 08:12:54 字数 1412 浏览 6 评论 0原文

我正在使用 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 成功调用我的远程函数,但我找到的大多数文档都认为这是执行 AMF 的旧的、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

I am using web2py (v1.63) and Flex 3. web2py v1.61 introduced the @service decorators, which allow you to tag a controller function with @service.amfrpc. You can then call that function remotely using http://..../app/default/call/amfrpc/[function]. See http://www.web2py.com/examples/default/tools#services. Does anybody have an example of how you would set up a Flex 3 to call a function like this? Here is what I have tried so far:

<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>

In my scenario, what should be the value of the destination and source attributes? I have read a couple of articles on non-web2py implementations, such as http://corlan.org/2008/10/10/flex-and-php-remoting-with-amfphp/, but they use a .../gateway.php file instead of having a URI that maps directly to the function.

Alternatively, I have been able to use flash.net.NetConnection to successfully call my remote function, but most of the documentation I have found considers this to be the old, pre-Flex 3 way of doing AMF. See http://pyamf.org/wiki/HelloWorld/Flex. Here is the NetConnection code:

gateway = new NetConnection();
gateway.connect("http://{mysite}/{myapp}/default/call/amfrpc/");
resp = new Responder(show_results, on_fault);
gateway.call("getContacts", resp);

-Rob

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黑白记忆 2024-07-28 08:12:54

我还没有找到将 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

I have not found a way to use a RemoteObject with the @service.amfrpc decorator. However, I can use the older ActionScript code using a NetConnection (similar to what I posted originally) and pair that with a @service.amfrpc function on the web2py side. This seems to work fine. The one thing that you would want to change in the NetConnection code I shared originally, is adding an event listener for connection status. You can add more listeners if you feel the need, but I found that NetStatusEvent was a must. This status will be fired if the server is not responding. You connection set up would look like:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文