2009-08-20 6 views
6

Ich versuche zu verstehen, wie ich SOAP oder XML-RPC verwenden kann, um eine Remote-API für mein Produkt zu erstellen. Problem ist, dass ein Teil meiner API erfordert, dass ich Ereignisse von meinem Server auf den Client übertragen kann - ich muss in der Lage sein, einen Rückruf zu senden und nicht nur eine Funktion als Teil meiner API aufzurufen . Gibt es eine gute Möglichkeit, das in SOAP oder XML-RPC zu tun?Implementieren eines Rückrufs in XML-RPC oder SOAP

Antwort

7

Es gibt zwei Möglichkeiten, Benachrichtigungen in einem RPC-System auszuführen: das Push-Modell und das Pull-Modell. Im Pull-Modell fragt der Client den Server regelmäßig ab, ob Benachrichtigungen verfügbar sind. Der Server muss sie speichern, bis der Client sie abruft (oder bis sie ablaufen). Als eine Variante kann der Client einen blockierenden RPC-Aufruf haben, der blockiert, bis das nächste Ereignis verfügbar wird, und dann sofort zurückkehrt. Das funktioniert gut mit CORBA, aber funktioniert nicht so gut mit SOAP oder XML-RPC, da die HTTP-Implementierungen in der Regel nicht bereit sind, eine Verbindung für Stunden offen zu lassen.

Im Push-Modell ruft der Producer einen RPC auf dem Consumer auf und macht den Consumer zu einem Server. Das funktioniert auch nicht so gut mit SOAP oder XML-RPC, da der Client normalerweise nicht bereit ist, die Serverrolle zu übernehmen, und Firewalls verhindern möglicherweise, dass der Rückruf durchkommt. Der periodische Zug ist also der realistischste Ansatz.

P.S. Sie haben vielleicht bemerkt, dass ich Ihrer Terminologie nicht gefolgt bin: Sie können Ereignisse nicht drücken. Ein Ereignis ist etwas, was passiert. Sie können nur auf die Benachrichtigung drücken, bei der es sich um eine Information handelt, dass ein Ereignis stattgefunden hat.

+0

Dies bedeutet, dass im Wesentlichen ich bin mit regelmäßigen Updates, die in Bezug auf Ressourcen etwas verschwenderisch ist links. Danke für die Antwort –

0

Sie können dies mit WCF tun. Ich weiß jedoch nicht, ob Sie das interoperabel machen können. Schauen Sie in Duplex Services.

1

Ok, schließlich wurde die Entscheidung getroffen, Callbacks als APIs zu behandeln, die nicht sofort zurückkehren.

Grundsätzlich wird eine RPC-XML-Anfrage gesendet, in der eine Benachrichtigung über eine bestimmte Ereignisliste angefordert wird. Unser Server würde warten, bis eines der Ereignisse eintritt, und dann nach einer bestimmten Zeit als Antwort oder Timeout zurückmelden, um mitzuteilen, dass nichts passiert ist. Der Anrufer kann versuchen, die Anfrage erneut zu senden, um weiter zu warten.

Verwandte Themen