Подтвердить что ты не робот

Использование protobuf в WCF-сервисах

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

Ответ 3

См. 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 и т.д.