SOAP または XML-RPC を使用して製品用のリモートのオープン API を作成する方法を理解しようとしています。問題は、API の一部で、サーバーからクライアントにプッシュされたイベントを取得できるようにする必要があることです。API の一部として「関数を呼び出す」だけでなく、「コールバックを送信する」ことができる必要があります。SOAPまたはXML-RPCでそれを行う良い方法はありますか?
3 に答える
RPC システムで通知を行うには、プッシュ モデルとプル モデルの 2 つの方法があります。プル モデルでは、クライアントは通知が利用可能かどうかを定期的にサーバーに問い合わせます。サーバーは、クライアントがそれらを取得するまで (または有効期限が切れるまで)、それらを保存する必要があります。バリアントとして、クライアントは、次のイベントが利用可能になるまでブロックし、すぐに戻るブロッキング RPC 呼び出しを持つ場合があります。これは CORBA では問題なく機能しますが、SOAP や XML-RPC ではあまりうまく機能しません。HTTP 実装は通常、接続を何時間も開いたままにしておく準備ができていないためです。
プッシュ モデルでは、プロデューサーはコンシューマーで RPC を呼び出し、コンシューマーをサーバーにします。通常、クライアントはサーバーの役割を引き受ける準備ができておらず、ファイアウォールがコールバックの通過を妨げる可能性があるため、これは SOAP や XML-RPC でもうまく機能しません。したがって、定期的なプルは最も現実的なアプローチです。
PS 用語に従っていないことに気付いたかもしれません: you cannot push events。イベントとは何かが起こることです。イベントが発生したという情報である通知のみをプッシュできます。
わかりました。最終的に下された決定は、コールバックをすぐには戻らない API として扱うことでした。
基本的に、RPC-XML リクエストが送信され、特定のイベント リストについて通知を受けるように求められます。私たちのサーバーは、イベントの 1 つが発生するまで待機し、一定時間後に応答またはタイムアウトとして報告し、何も起こらなかったことを通知します。発信者は、リクエストをもう一度送信して待機を続けることができます。
これは WCF で行うことができます。ただし、相互運用可能な方法でそれを実行できるかどうかはわかりません。Duplex Servicesを調べます。