Использование mx:RemoteObject с декоратором @service.amfrpc web2py
Я использую web2py (v1.63) и Flex 3. В web2py v1.61 представлены декораторы @service, которые позволяют помечать функцию контроллера с помощью @service.amfrpc. Затем вы можете вызвать эту функцию удаленно, используя http://..../app/default/call/amfrpc/[function]
, См. http://www.web2py.com/examples/default/tools. У кого-нибудь есть пример того, как вы бы настроили 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);
Роб
1 ответ
Я не нашел способ использовать 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);
Роб