9

これが私の状況です:

  1. 次のwsdlようなヘッダーファイルに「変換」されています。wsdl2h -o file.h file.wsdl
  2. 次に、実行しましたsoapcpp2 -Icorrect_path -j file.h
  3. 「サーバー側」では、次を使用してサービスを実装しましたsoapXXXService.[h|cpp]
  4. 再び「サーバー側」で、私は( withsoap_init2SOAP_IO_KEEPALIVE)を使用しました。soap_bindsoap_acceptsoap_copy
  5. 「クライアント側」では、生成されたproxyオブジェクトを (再び を使用してSOAP_IO_KEEPALIVE) 使用し、メッセージを作成してサーバーに送信します。
  6. 「サーバー」はこのメッセージを受信し、ACK を返します(カスタムXML)
  7. 「クライアント」は を受け取り、ACKすべてが完全に問題ありません。

したがって、私が今やりたいことは、「サーバー」が「実際の」応答を「クライアント」に返すようにし、「クライアント」が「サーバー」に返さなければならないことACKです。

これはどのように可能ですか?(そのはず)


「何を試しましたか?」

2つのことが頭に浮かびます。

1 つ目は、 から返されたソケットのファイル記述子を何らかの方法で再利用してsoap_accept、「実際の応答」をサーバーに送り返すことです。しかし、これは可能ですか?
Unix ソケットは全二重なので、技術的には可能ですが、gSoap制限はありますか? ドキュメントでこれについて何も見ていないからです。

私の頭に浮かぶ2番目のオプションは、「クライアント」で同じ「サービス」を作成し、メッセージ(「実際の応答」)を受信できるようにACKし、「サーバー」で行われたのと同じ方法で返すことです。 . proxyしかし、これは、いわゆる「実際の応答」を送信できるようにするには、「サーバー」にもオブジェクトのインスタンスが必要であることを意味します。
そして、これは私には本当に醜く恐ろしいように聞こえます。これが唯一のオプションである場合、私は驚くことではありませんが..

編集:2番目のオプションの場合-これは、クライアントにリスナーポートが必要であり、着信接続などを処理する必要があることを意味します.私にはクライアントのようには聞こえません..


動作の基本的な部分が欠けている可能性があることは理解していますが、ユーザー ドキュメント「入門」ガイドgSoap全体を読みましたが、これについては何も見つかりませんでした。

不明な点がありましたらお知らせください


編集:これがシナリオです、私は達成したいです:

  1. クライアントはサーバーにリクエストを送信します
  2. サーバーは応答としてACKを返します (標準の ACK と同様) - 要求を正常に受信したことを通知します
  3. 後で、サーバーはクライアントに応答を送信します (これが実際の応答です)。
  4. クライアントは再びACKを返します- 応答が正常に受信されたことを通知します

また、このシナリオは逆の方向にもある可能性があります。サーバーはクライアントにリクエストを送信することもできます。つまり、上記と同じシナリオですが、「クライアント」<->「サーバー」を置き換えます。

注: と は両方ともrequest/responseSOAPメッセージです。ACK

4

1 に答える 1

2

option 2質問で使用して実装しました。つまり、クライアントとサーバーの両方でサービス (リスナー) を実装し、プロキシ (リクエストの送信用) を使用します。このようにして、私は次のものを持っています:

  1. サーバーが立ち上がった
  2. クライアントが開始されます (リスナー別名「サービス」を開始します)
  3. クライアントSOAPリクエストを (プロキシ オブジェクトを使用して)送信し、サーバーに次のように伝えますxxx
  4. サーバーSOAPメッセージ (ACK)で応答します ( 「OK、今起きているようです」 ) 。
  5. その後、サーバーは、最初のメッセージで受信した場所を使用して、(プロキシオブジェクトを介して) クライアントにSOAP 要求を送信します。このリクエストは、送信されたリクエストの実際の応答ですこれは、「OK、あなたと通信する準備ができています」3.
  6. クライアントは、このリクエストに対して応答(ACK) を返します( 「OK、クール」と言います) 。

このようにして、クライアントとサーバーの両方が互いの場所を認識し、両方にリスナー (サービスの実装) があり、両方ともプロキシ オブジェクトを維持します。


これは私のために働くようです。option 1誰かが私に別のオプションを与えるか、私の質問について何か言ってくれたら嬉しいです.


編集:数日間の詳細な調査とプロトコルの詳細な分析の後、私は実装するつもりであり、それがこれを行う唯一の方法であるように見えました:

実装は、SOAP クライアントと SOAP サーバーの両方として機能できなければなりません (MUST)。

于 2013-04-15T13:57:54.850 に答える