Domanda

Sto usando web2py (v1.63) e Flex 3. web2py v1.61 introdotto i decoratori @service, che consentono di contrassegnare una funzione di controllo con @ service.amfrpc. È quindi possibile chiamare quella funzione in remoto utilizzando http://..../app/default/call/amfrpc/[function]. Vedere http://www.web2py.com/examples/default/tools#services. Qualcuno ha un esempio di come si dovrebbe impostare un Flex 3 per richiamare una funzione come questa? Ecco quello che ho provato finora:

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

Nel mio scenario, quello che dovrebbe essere il valore degli attributi origine e di destinazione? Ho letto un paio di articoli su implementazioni non web2py, come http://corlan.org/2008/10/10/flex-and-php-remoting-with-amfphp/ , ma usano un file ... / gateway.php invece di avere un URI che mappa direttamente alla funzione.

In alternativa, sono stato in grado di utilizzare flash.net.NetConnection per chiamare con successo la mia funzione a distanza, ma la maggior parte della documentazione che ho trovato considera che questo sia il modo vecchio, pre-Flex 3 di fare AMF. Vedere http://pyamf.org/wiki/HelloWorld/Flex . Ecco il codice NetConnection:

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

-Rob

È stato utile?

Soluzione

Non ho trovato un modo per utilizzare un RemoteObject con il decoratore @ service.amfrpc. Tuttavia, posso usare il vecchio codice ActionScript utilizzando un NetConnection (simile a quello che ho postato in origine) e abbinamento che, con una funzione @ service.amfrpc sul lato web2py. Questo sembra funzionare bene. L'unica cosa che si vorrebbe cambiare il codice NetConnection ho condiviso in origine, è l'aggiunta di un listener di eventi per lo stato della connessione. È possibile aggiungere più ascoltatori se si sente il bisogno, ma ho scoperto che NetStatusEvent era un must. Questo stato sarà licenziato se il server non risponde. È istituito il collegamento sarebbe simile:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top