Использование mx: RemoteObject с декоратором @ service.amfrpc web2py - PullRequest
2 голосов
/ 29 мая 2009

Я использую 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 способ выполнения 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);

* 1016 Роб *

1 Ответ

1 голос
/ 02 июня 2009

Я не нашел способа использовать RemoteObject с декоратором @ service.amfrpc. Однако я могу использовать старый код ActionScript с использованием NetConnection (аналогично тому, что я опубликовал изначально) и связать его с функцией @ service.amfrpc на стороне web2py. Кажется, это работает нормально. Единственное, что вы хотели бы изменить в исходном коде 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);

* 1004 Роб *

...