Здесь три части; сервер (звучит как C #), клиент (звучит как C ++) и транспорт. Взять их по отдельности и начать с самого важного:
транспорт: большое решение здесь - в какой форме вы хотите, чтобы данные были. Вы упоминаете буферы протокола, поэтому мы говорим о двоичном коде, но это может быть:
- необработанный поток октетов (подумайте: загрузка изображения с веб-сервера)
- веб-сервис SOAP, возвращающий поток или байт []
- тот же веб-сервис SOAP, возвращающий MTOM
Любой должен работать; Выбор зависит от доступных инструментов. Важная вещь: получить кусок двоичного кода по проводам.
Вам также нужно подумать об определении данных на этом этапе; .proto файл может определять вашу схему, и большинство реализаций протокольных буферов содержат инструмент для генерации соответствующих классов.
- сервер: в зависимости от выбора выше, это будет либо обработчик (
IHttpHandler
), либо класс веб-службы. В любом случае, их задача - запустить некоторую логику и вернуть поток байтов. Как вы получаете ваши данные зависит от вас, то в конечном итоге работа заключается в
заполнить типы DTO (во многих случаях сгенерированные из .proto, но не строго обязательно) и запустить его через API сериализации, записав результат в поток
- клиент: то же самое в обратном порядке; сгенерируйте ваши DTO из .proto и запустите его через API десериализации
Здесь перечислены различные реализации protobuf (C ++, C # и т. Д.) здесь .