ProtoBuf - это двоичный протокол. Он плохо сочетается с SOAP. Я предлагаю вам либо придерживаться gSOAP, либо полностью перейти на ProtoBuf. * 1001 *
С protoBuf вы определяете свой протокол в специальном формате, например:
message Product {
required string id = 1;
required string description = 2;
required int32 quantity = 3;
optional bool discontinued = 4;
}
Инструмент protoc
может генерировать код на C ++ / Java / Python, чтобы вы могли сериализовать его на одном конце и десериализовать на другом.
Как видите, 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
.