Страницы

Поиск по вопросам

четверг, 28 февраля 2019 г.

Как снизить уровень взаимодействия с сетью в WCF до Stream?

Технология WCF хорошо решает проблему с брандмауэрами при разработке распределённых приложений, так как предоставляет уровень абстракции над стандартными протоколами и готовые механизмы аутентификации. Но нижний уровень упаковки данных в WCF - это контракты данных. Мало того, что wsdl накладывает много ограничений на формат данных, так ещё и эффективность xml-упаковки оставляет желать лучшего. Я сделал обёртку, чтобы надстроить бинарный формат данных поверх xml, но это тоже не самое эффективное решение. Да, объём передаваемых данных уменьшился примерно на порядок, исчезли падения на превышении немаленьких квот при получении списка объектов на видимом прямоугольнике карты, но зато и перепаковка выполняется дважды - сначала объектная модель сериализуется в бинарник, а потом бинарник размазывается в xml. Когда операций перепаковки много, это заметно. В идеале для сервисов внутреннего пользования (т.е., не предназначенных для интеграции с внешними системами) вместо контрактов я бы хотел иметь Stream, который отвечает за взаимодействие Endpoint'ов, разруливает поддержку стандартных сетевых протоколов и аутентификацию, но в который можно писать / читать любые данные. То есть, я хотел бы снизить уровень взаимодействия с сетью, но сохранив то хорошее, что есть в WCF. Поточные контракты данных здесь не подходят, так как если сервис инстанцирован локально, никаких перепаковок происходить не должно. Есть ли статьи на эту тему? Есть ли альтернативные технологии? Может, есть настройки WCF, которые бы позволяли сериализовывать данные не через xml, а прямо гонять сформированные бинарные массивы?


Ответ

В WCF можно собрать свой customBinding, включив туда альтернативный кодировщик сообщений. выглядит как то, что вам нужно.

Комментариев нет:

Отправить комментарий