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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top