2009-08-20 8 views
6

Sto cercando di capire come utilizzare SOAP o XML-RPC per creare un'API remota e aperta per il mio prodotto. Problema, parte della mia API mi richiederà di essere in grado di ottenere eventi trasferiti dal mio server al client - Dovrò essere in grado di "inviare una richiamata" e non solo "chiamare una funzione" come parte della mia API . C'è un buon modo per farlo in SOAP o XML-RPC?Implementazione di una richiamata in XML-RPC o SOAP

risposta

7

Esistono due modi per effettuare le notifiche in un sistema RPC: il modello push e il modello pull. Nel modello pull, il client interrogherà periodicamente il server se sono disponibili eventuali notifiche. Il server deve memorizzarli finché il client non li recupera (o finché non scadono). Come variante, il client può avere una chiamata RPC bloccante che blocca fino a quando il prossimo evento non diventa disponibile, e quindi ritorna immediatamente. Funziona bene con CORBA, ma non funziona così bene con SOAP o XML-RPC, poiché le implementazioni HTTP non sono in genere pronte a lasciare una connessione aperta per ore.

Nel modello push, il produttore invocherà un RPC sul consumatore, rendendo il consumatore un server. Ciò non funziona egregiamente con SOAP o XML-RPC, poiché il client non è in genere preparato a svolgere il ruolo del server e i firewall potrebbero impedire il richiamo della callback. Quindi l'attrazione periodica riguarda l'approccio più realistico.

P.S. potresti aver notato che non seguivo la tua terminologia: non puoi spingere eventi . Un evento è qualcosa che accade. Puoi solo inviare la notifica, che è un'informazione che un evento è accaduto.

+0

Ciò significa che in sostanza sono rimasto con aggiornamenti periodici, il che è un po 'dispendioso in termini di risorse. Grazie per la risposta –

0

È possibile farlo con WCF. Tuttavia, non so se puoi farlo in modo interoperabile. Esamina Duplex Services.

1

Ok, alla fine la decisione presa era di trattare i callback come API che non ritornano immediatamente.

Fondamentalmente, verrà inviata una richiesta RPC-XML che richiede di essere notificata in un determinato elenco di eventi. Il nostro server attenderà fino a quando uno degli eventi si verificherà e quindi lo riporterà come risposta o timeout dopo un certo periodo di tempo, notificando che non è successo nulla. Il chiamante sarà in grado di provare a inviare la richiesta nuovamente per continuare ad attendere.