WCF System.ServiceModel.Channel.Message: двоичное содержимое сообщения (не XML)? - PullRequest
2 голосов
/ 18 марта 2009

Мне нужно получить двоичные (не XML) документы в виде сообщений в пользовательском адаптере больших объектов WCF (для использования в BizTalk). Сообщения должны быть представлены как экземпляры System.ServiceModel.Channel.Message.

Я не могу найти, как создать экземпляр этого класса, когда содержимое является двоичным (под «двоичным» я подразумеваю любой произвольный байтовый массив или поток, а не только двоичные представления документов XML).

Возможно ли это? Или будет ли перенос двоичного содержимого в конверт XML единственным способом сделать это в WCF?

Ответы [ 2 ]

1 голос
/ 18 марта 2009

По сути, сообщения WCF являются XML, поскольку класс S.S.C.Message использует Xml InfoSet в качестве базового представления сообщения.

Так что да, каким-то образом вам нужно "обернуть" ваш двоичный контент в конверт XML (который не обязательно должен быть конвертом SOAP, учтите, в зависимости от того, как настроена ваша привязка).

Тем не менее, обратите внимание, что это не исключает возможности потоковой передачи для обработки больших полезных нагрузок сообщений без буферизации всего сообщения в памяти; WCF все еще позволяет вам делать это, хотя иногда не очень очевидно, как это работает.

Поскольку вы работаете с пользовательским каналом, у вас есть один из двух вариантов, я думаю:

  1. Попросите свой собственный канал добавить обертку XML вокруг вашего двоичного содержимого перед передачей его вверх или
  2. Создайте собственный MessageEncoder, который автоматически добавит его для вас.

В любом случае, если вы имеете дело с большими сообщениями, вам нужно убедиться, что вы используете перегрузки MessageEncoder, которые обрабатывают потоки, а не буферы, так как они дают вам возможность выполнять скоординированную потоковую передачу реализация сервиса.

1 голос
/ 18 марта 2009

WCF предлагает несколько способов отправки двоичных вложений и потоковых данных различными способами. У нас на работе есть приложение, которое делает это, но у меня не было возможности покопаться в коде, поэтому я не могу предложить слишком много помощи. Вот несколько ссылок, с которых можно начать ( Блог Николая Аллена «Индиго» * ​​1002 * - отличное место для информации WCF):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...