ProtoBuf是一个二进制协议。它与 SOAP 不能很好地混合。我建议你要么坚持使用gSOAP,要么完全转换为ProtoBuf。
使用protoBuf,您可以以这样的特殊格式定义协议,
message Product {
required string id = 1;
required string description = 2;
required int32 quantity = 3;
optional bool discontinued = 4;
}
该工具可以在C++/Java/Python中生成代码,因此您可以在一端序列化它,在另一端反序列化。protoc
如您所见,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;
}
这是另一个序列化的 ProtoBuf 消息。SOAP 标头中的所有内容现在都转到 。encodedMessage
headers