совместимость с протоколом protobuf - PullRequest
0 голосов
/ 01 июня 2018

Я использую облачный сервис, основанный на protobuf2.0.Этот облачный сервис не может быть изменен.Теперь у нас есть клиент для подключения к этому облачному сервису, который построен на .netcore 2.0.В ходе тестирования этот .netcore работает только с синтаксисом protobuf3.0.

И синтаксис 3.0 немного отличается от 2.0.Если я разверну клиент с protobuf3.0 в C # .netcore 2.0, сможет ли он использовать службу, основанную на 2.0 protobuf?

1 Ответ

0 голосов
/ 01 июня 2018

Фактический двоичный формат сериализации за это время вообще не изменился, поэтому фундаментальных блокировщиков нет.

Самым большим отличием функций между proto2 и proto3 является обработка значений по умолчанию / необязательных значений.Proto3 не имеет понятия «значение по умолчанию равно 4» (по умолчанию всегда ноль / ноль), и не имеет понятия явного указания значения, которое также является значением по умолчанию (ненулевые значения всегда отправляются, нули никогда непослал).Поэтому, если ваша схема proto2 использует ненулевые значения по умолчанию, переход может быть неуклюжим.

При тестировании этот .netcore работает только с синтаксисом protobuf3.0.

Это утверждение заставляет меня думать, что вы не используете protobuf-net (теги), но на самом деле вы используете реализацию C # от Google - оригинальный порт Джона был только proto2, а версия, перенесенная в базу кода Google, - только proto3.Однако protobuf-net (отдельная реализация) не имеет таких ограничений и поддерживает как proto2, так и proto3 на всех платформах, включая .NET Core.Однако у него другой API.Protobuf-net можно найти в nuget , с инструментом обработки .proto, доступным здесь (он также предоставляет доступ ко всем выводам «protoc», если вы хотите сравнить с версией Google).

...