Использование protobuf в сервисах WCF - PullRequest
16 голосов
/ 26 апреля 2009

Мои веб-страницы asp.net находятся на веб-сервере IIS и взаимодействуют со службами WCF (на сервере приложений Windows 2008) с использованием базового HTTP-связывания. Производительность моих wcf-сервисов, кажется, не так хороша, и я хочу улучшить то же самое. Кроме того, мне нужно балансировать по масштабируемости, так как мой сайт будет иметь очень высокий трафик.

Сжатие HTTP, регулирование - это некоторые из известных мне способов, но они еще не пробовали. Могу ли я использовать protobuf API ... Пожалуйста, предложите ...

Ответы [ 3 ]

27 голосов
/ 26 апреля 2009

Краткий ответ "да" ...

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

Во-первых, protobuf-net имеет хуки для WCF, позволяющие пометить операции в контракте на обслуживание как ProtoBehavior. Затем это заменяет обычный DataContractSerializer на использование сериализации protobuf-net. Однако есть несколько предостережений:

  • ваши члены-данные должны иметь явный порядок (например, [ProtoMember(Order = 1)]), поскольку он использует эти числа в качестве идентификаторов полей (в буферах протокола используются числовые поля)
  • лучше всего работает с совместным использованием сборок / классов (контракта на обслуживание и т. Д.), Так как это пользовательское поведение не отображается в "mex"

При использовании с базовым HTTP-транспортом, это также совместимо с MTOM (если включено) для максимальной производительности. Производительность нетривиальных сообщений во многом пропорциональна их размеру; Вы можете получить представление о размерах protobuf-net здесь .

Кроме того, я также работаю над стеком RPC на заказ. Текущая сборка имеет рабочий стек по протоколу http, но я также планирую включить его в сыром TCP / IP, когда у меня будет такая возможность. У меня еще не было возможности написать это, но я могу предоставить примеры по запросу. Обратите внимание, что для наиболее удобного использования вам также понадобится библиотека расширений 3.5.

Любые вопросы, добавьте комментарий или напишите мне (см. Мой профиль).

2 голосов
/ 26 апреля 2009

Вы также можете взглянуть на использование привязки на основе TCP, если нет необходимости открывать службу WCF за пределами внутренней сети.

0 голосов
/ 26 апреля 2009

См. protobuf-net .

protobuf-net - это реализация .NET, позволяющая вам сериализуйте ваши .NET объекты эффективно и легко. Это совместимо с большей частью семейства .NET, включая .NET 2.0 / 3.0 / 3.5, .NET CF 2.0 / 3.5, Mono 2.x, Silverlight 2 и т. Д.

...