2009-08-20 8 views
6

SOAPまたはXML-RPCを使用して、製品用のリモートのオープンAPIを作成する方法を理解しようとしています。 問題は、私のAPIの一部で、私のサーバーからクライアントにプッシュされたイベントを取得する必要があります。私はAPIの一環として「関数を呼び出す」だけでなく、「コールバックを送る」ことができる必要があります。 SOAPまたはXML-RPCでこれを行う良い方法はありますか?XML-RPCまたはSOAPでコールバックを実装する

答えて

7

RPCシステムで通知を行うには、プッシュモデルとプルモデルの2つの方法があります。プルモデルでは、クライアントは、通知が利用可能かどうかを定期的にサーバーに照会します。サーバーは、クライアントがそれらをフェッチするまで(または期限が切れるまで)それらを保管する必要があります。一変形として、クライアントは、次のイベントが利用可能になるまでブロックし、その後すぐに戻るブロッキングRPC呼び出しを持つかもしれません。 CORBAではうまく動作しますが、SOAP実装やXML-RPCではうまく機能しません。これは、HTTP実装では通常、接続を何時間も開いておく準備ができていないためです。

プッシュモデルでは、プロデューサはコンシューマでRPCを呼び出し、コンシューマをサーバーにします。クライアントは通常、サーバーの役割を果たす準備ができておらず、ファイアウォールによってコールバックが通過しない可能性があるため、SOAPやXML-RPCではうまく機能しません。したがって、定期的な引き込みは最も現実的なアプローチです。

P.S.私はあなたの専門用語に従わなかったことに気づいたかもしれません。イベントを押すことはできません。イベントは起こることです。通知がプッシュできるのは、イベントが発生したという情報です。

+0

これは、本質的に、定期的な更新が残っていることを意味します。これは、リソースの面でいくらか無駄です。 お返事ありがとうございます –

0

これはWCFで行うことができます。しかし、私はあなたが相互運用可能な方法でそれを行うことができるかどうかはわかりません。 Duplex Servicesをご覧ください。

1

最後に、コールバックを直ちに返さないAPIとして処理することが決定されました。

基本的には、RPC-XML要求が送信され、指定されたイベントリストで通知を受けるよう求められます。私たちのサーバーは、イベントが発生するまで待ってから、何も起こっていないことを通知して、一定時間後に応答またはタイムアウトとして報告します。呼び出し元は、要求を再試行して、待機し続けることができます。

関連する問題