2009-07-15 2 views
3

В настоящее время мы используем вызовы Ajax для веб-службы .net, которая затем возвращает объект Json клиенту. Некоторые из этих объектов Json довольно массивны (> 500k несжатых). Мы слышали некоторые хорошие вещи о буферах протокола Google и экспериментировали.Буферы протокола Google или что-то подобное для .net/javascript

До сих пор у нас была довольно удачная сериализация на сервере с тем, что кажется наиболее распространенной версией .net - «protobuf-net». У нас не было большой удачи десериализации на клиенте. Мы попытались использовать то, что кажется единственным и единственным десериализатором javascript protobuf.js. Мы обнаружили, что это непросто, очень мало примеров или документации, и, похоже, они не обрабатывают типы данных за пределами строк и ints.

Похоже, что на этом этапе было бы доказано, четко определено решение для сериализации/десериализации двоичных данных между .net и веб-клиентом. Может быть, нам что-то не хватает.

Наши требования - это вызовы Ajax от клиента и методы веб-сервисов .net на сервере (.asmx или WCF).

Любые комментарии и предложения приветствуются.

ответ

5

Если клиент является javascript, я думаю, что вы будете бороться. Существует (как вы уже заявляли) ограничено javascript охват, но я не уверен, что он вас много выиграет. Чтобы quote from Kenton Varda (кто действительно знает Protobuf):

Одна из проблем, с яваскрипт и Protobuf является то, что вам нужно много кода поддержки для разбора сообщений. Если вы в конечном итоге не отправили довольно много вещей взад и вперед, делая пользователь скачать JS protobuf codec библиотека может быть чистым убытком. Может быть лучше использовать JSON или XML, потому что браузеры уже имеют встроенную поддержку .

То есть, я думаю, разные люди внутри Google был играть с JavaScript + протокол буферов на некоторое время, и если мы в конечном итоге с чем-нибудь, что работает достаточно хорошо, мы выпустим его.

Так что, возможно, есть надежда по дороге. На данный момент я придерживаюсь json + deflate, или если ваш сценарий позволяет это, возможно, вы можете использовать апплет Silverlight, встроенный в клиент? protobuf-net будет работать внутри Silverlight.

0

Как уже упоминалось, использование двоичных протоколов из javascript является проблематичным.Некоторые особо неприятные аспекты:

  • Это трудно надежно получить доступ к содержимому в двоичной форме, с JavaScript - обходные, как правило, браузер-специфические (см Accessing binary data from Javascript, Ajax, IE: can responseBody be read from Javascript (not VB)?)
  • Кодирование/декодирование стандартной IEEE закодированный двойной/поплавок значения являются сложными и неэффективными (если не совсем невозможно)

И производительность вряд ли будет более быстрой, по сравнению с встроенной поддержкой JSON или XML.