Использование protobuf в сервисах WCF
Мои веб-страницы asp.net находятся на веб-сервере IIS и взаимодействуют со службами WCF (на сервере приложений Windows 2008), используя базовую привязку HTTP. Производительность моих wcf-сервисов, кажется, не так хороша, и я хочу улучшить то же самое. Кроме того, мне нужно балансировать по масштабируемости, так как мой сайт будет иметь очень высокий трафик.
Сжатие HTTP, регулирование - вот некоторые из способов, о которых я знаю, но еще не пробовал их. Могу ли я использовать Protobuf API... Пожалуйста, предложите...
3 ответа
Краткий ответ - да"...
Сама спецификация протокольных буферов не обеспечивает стек RPC, но некоторые из них были добавлены за пределы спецификации.
Во-первых, protobuf-net имеет хуки для WCF, позволяющие пометить операции в контракте на обслуживание как ProtoBehavior
, Это затем меняет регулярный DataContractSerializer
использовать сериализацию protobuf-net. Однако есть несколько предостережений:
- ваши данные-члены должны иметь явный порядок (например,
[ProtoMember(Order = 1)]
), поскольку он использует эти числа в качестве идентификаторов полей (в буферах протокола используются числовые поля) - лучше всего работает с совместным использованием сборок / классов (контракта на обслуживание и т. д.), так как это пользовательское поведение не отображается в "mex"
При использовании с базовым HTTP-транспортом, это также совместимо с MTOM (если включено) для максимальной производительности. Производительность нетривиальных сообщений во многом пропорциональна их размеру; Вы можете получить представление о размерах protobuf-net здесь.
Кроме того, я также работаю над стеком RPC на заказ. Текущая сборка имеет рабочий стек по протоколу http, но я также планирую включить его в сыром TCP/IP, когда у меня будет такая возможность. У меня еще не было возможности написать это, но я могу предоставить примеры по запросу. Обратите внимание, что для наиболее удобного использования вам также понадобится библиотека расширений 3.5.
Любые вопросы, добавьте комментарий или напишите мне (см. Мой профиль).
Вы также можете взглянуть на использование привязки на основе TCP, если нет необходимости показывать службу WCF за пределами внутренней сети.
Смотри 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 и т. Д.