いるProtobufはバイナリプロトコルです。 SOAPとうまく組み合わせることはできません。 gSOAPに固執するか、ProtoBufに完全に変換することをお勧めします。いるProtobufで
、あなたは一端に、それをシリアル化し、別の上にデシリアライズすることができますので、protoc
ツールはC++/Javaの/ Pythonでコードを生成することができ
message Product {
required string id = 1;
required string description = 2;
required int32 quantity = 3;
optional bool discontinued = 4;
}
、このような特別な形式でのプロトコルを定義します。
ご覧のとおり、ProtoBufは個々のオブジェクトをシリアライズするように設計されています。ヘッダーのように、SOAPが提供するすべての機能を提供するわけではありません。この問題を回避するために、ProtoBufをProtoBufの内部で使用しています。私たちは、
message Envelope {
enum Type {
SEARCH = 1;
SEARCH_RESPONSE = 2;
RETRIEVE = 3;
RETRIEVE_RESPONSE = 4;
}
required Type type = 1;
required bytes encodedMessage = 2;
message Header {
required string key = 1;
required bytes value = 2;
}
repeated Header headers = 3;
}
encodedMessage
は別のシリアル化されいるProtobufメッセージであり、このように封筒を定義します。SOAPヘッダーの内容はすべて
headers
になります。
FYI。パフォーマンスはgsoapチームと議論されました(私はこれに参加しました)。そして、 'SOAP_XML_TREE'フラグを使うか、' -DWITH_NOIDREF'でコンパイルすることを推奨しました。このフラグがなければ、グラフをシリアライズする(つまり、相互参照されたオブジェクトを検出し、周期的なデータ構造を分析する)ために、複数のref要素(id-ref)でSOAPエンコーディングするため、パフォーマンスが大幅に低下する可能性があります。提案されたフラグはXMLをツリーとしてシリアライズするためにこの機能をオフにします。メッセージング速度が大幅に向上しました。パフォーマンスの唯一のボトルネックは、ネットワークの待ち時間と帯域幅です。 –
@Alex SOAPはまだ更新されていますか?それは実際に印象的です!その質問は7歳ですので、そのことに気付かないでしょう:) – Nazgob
私が他の人に知っていることは、この勧告でFAQ(2005年以降)を読んだことです。これが最近の発展であると思わせる原因は何ですか? –