HTTP/SOAP (BasicHTTPBinding) 経由で WCF Web サービスに接続する Linux/c クライアント アプリがあります。gSOAPを使用しています。コールバックを使用して Web サービスへの呼び出しを実装できますか? コールバックとして非同期にデータを取得したい。
更新: 質問のタイトルを更新しました。
HTTP/SOAP (BasicHTTPBinding) 経由で WCF Web サービスに接続する Linux/c クライアント アプリがあります。gSOAPを使用しています。コールバックを使用して Web サービスへの呼び出しを実装できますか? コールバックとして非同期にデータを取得したい。
更新: 質問のタイトルを更新しました。
WCF は、デュプレックス サービス、または要求元のクライアントにコールバックできるサービスをサポートしています。二重サービスは、ステートフルであるだけでなく、クライアントにコントラクトの実装要件を課すため、非常に複雑になる可能性があります。
二重サービスでは、WSDuplexHttpBinding を使用する必要があります。コールバック チャネルへの参照を取得するには、OperationContext を使用する必要があります。クライアントは、何らかのクラスでコールバック コントラクトを実装し、コールバック クラスのインスタンスを含む InstanceContext をクライアント プロキシに提供する必要があります。双方向の通信をサポートする必要があり、クライアントが独自のファイアウォールの背後にある場合、またはインターネット経由である場合、これを解決するのは複雑な問題になる可能性があります。二重サービスを作成するときは注意してください...それらは価値があるよりも多くの場合、面倒です...そのため、本当に必要かどうかを確認してください。;-)
次のページが役立つ場合があります。
私は同じ問題に直面しており、私が試みているアプローチは、gsoap サーバー/クライアントのペアを持つことです。基本的に、各プロセスはポートで SOAP 呼び出しをリッスンし、他のサーバーへのクライアント呼び出しを行います。このようにして、ポーリングやその他の複雑なアプローチを回避します。どのようなビジネス ロジックが実装されていても、コードは明らかにスレッド セーフである必要がありますが、クライアント/サーバーのコンボ ペアは、これまで考えた中で最も単純なソリューションです。
明らかに、前述のサーバーと前述のクライアントというソリューションの両側を制御する必要があります。
basicHttpBinding はコールバックをサポートしていません。別のアプローチとして、クライアントが応答をポーリングできる別の方法を用意することもできます。