これが私の状況です:
- 次の
wsdlようなヘッダーファイルに「変換」されています。wsdl2h -o file.h file.wsdl - 次に、実行しました
soapcpp2 -Icorrect_path -j file.h - 「サーバー側」では、次を使用してサービスを実装しました
soapXXXService.[h|cpp] - 再び「サーバー側」で、私は( with
soap_init2でSOAP_IO_KEEPALIVE)を使用しました。soap_bindsoap_acceptsoap_copy - 「クライアント側」では、生成された
proxyオブジェクトを (再び を使用してSOAP_IO_KEEPALIVE) 使用し、メッセージを作成してサーバーに送信します。 - 「サーバー」はこのメッセージを受信し、ACK を返します(カスタム
XML) - 「クライアント」は を受け取り、
ACKすべてが完全に問題ありません。
したがって、私が今やりたいことは、「サーバー」が「実際の」応答を「クライアント」に返すようにし、「クライアント」が「サーバー」に返さなければならないことACKです。
これはどのように可能ですか?(そのはず)
「何を試しましたか?」
2つのことが頭に浮かびます。
1 つ目は、 から返されたソケットのファイル記述子を何らかの方法で再利用してsoap_accept、「実際の応答」をサーバーに送り返すことです。しかし、これは可能ですか?
Unix ソケットは全二重なので、技術的には可能ですが、gSoap制限はありますか? ドキュメントでこれについて何も見ていないからです。
私の頭に浮かぶ2番目のオプションは、「クライアント」で同じ「サービス」を作成し、メッセージ(「実際の応答」)を受信できるようにACKし、「サーバー」で行われたのと同じ方法で返すことです。 . proxyしかし、これは、いわゆる「実際の応答」を送信できるようにするには、「サーバー」にもオブジェクトのインスタンスが必要であることを意味します。
そして、これは私には本当に醜く恐ろしいように聞こえます。これが唯一のオプションである場合、私は驚くことではありませんが..
編集:2番目のオプションの場合-これは、クライアントにリスナーポートが必要であり、着信接続などを処理する必要があることを意味します.私にはクライアントのようには聞こえません..
動作の基本的な部分が欠けている可能性があることは理解していますが、ユーザー ドキュメントと「入門」ガイドgSoap全体を読みましたが、これについては何も見つかりませんでした。
不明な点がありましたらお知らせください
編集:これがシナリオです、私は達成したいです:
- クライアントはサーバーにリクエストを送信します
- サーバーは応答としてACKを返します (標準の ACK と同様) - 要求を正常に受信したことを通知します
- 後で、サーバーはクライアントに応答を送信します (これが実際の応答です)。
- クライアントは再びACKを返します- 応答が正常に受信されたことを通知します
また、このシナリオは逆の方向にもある可能性があります。サーバーはクライアントにリクエストを送信することもできます。つまり、上記と同じシナリオですが、「クライアント」<->「サーバー」を置き換えます。
注: と は両方ともrequest/responseSOAPメッセージです。ACK