Usando mx: RemoteObject com @ service.amfrpc decorador do web2py
-
06-09-2019 - |
Pergunta
Eu estou usando web2py (v1.63) e Flex 3. web2py v1.61 introduziu os decoradores @Service, que permitem que você marque uma função do controlador com @ service.amfrpc. Você pode então chamar essa função remotamente usando http://..../app/default/call/amfrpc/[function]
. Consulte http://www.web2py.com/examples/default/tools#services. Alguém tem um exemplo de como você poderia configurar uma Flex 3 para chamar uma função como este? Aqui está o que eu tentei até agora:
<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>
Em meu cenário, qual deve ser o valor dos atributos de destino e origem? Eu li um par de artigos sobre implementações não-web2py, como http://corlan.org/2008/10/10/flex-and-php-remoting-with-amfphp/ , mas eles usam um arquivo ... / gateway.php em vez de ter um URI que mapeia diretamente para a função.
Como alternativa, eu tenho sido capaz de usar flash.net.NetConnection para chamar com êxito a minha função remota, mas a maioria da documentação que eu encontrei considera ser esta a idade, pré Flex-3 maneira de fazer AMF. Consulte http://pyamf.org/wiki/HelloWorld/Flex . Aqui está o código NetConnection:
gateway = new NetConnection();
gateway.connect("http://{mysite}/{myapp}/default/call/amfrpc/");
resp = new Responder(show_results, on_fault);
gateway.call("getContacts", resp);
-Rob
Solução
Eu não encontrei uma maneira de usar um RemoteObject com o decorador @ service.amfrpc. No entanto, eu posso usar o código antigo ActionScript usando um NetConnection (semelhante ao que eu postei originalmente) e par que com uma função @ service.amfrpc no lado do web2py. Isso parece funcionar bem. A única coisa que você gostaria de mudança no código NetConnection I compartilhado originalmente, está adicionando um ouvinte de evento status da conexão. Você pode adicionar mais ouvintes se você sentir a necessidade, mas eu achei que NetStatusEvent era uma obrigação. Esse status será demitido se o servidor não está respondendo. Você conexão configurar seria parecido com:
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