Отправка двоичных данных через WCF: двоичное и MTOM-кодирование

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

Я хотел бы знать разницу между отправкой данных с помощью BinaryMessageEncodingBindingElement и MtomMessageEncodingBindingElement. Мне до сих пор не ясно, когда какой подход использовать после прочтения этой страницы из MSDN на Большие объемы данных и потоковая передача.

Также небольшой вопрос: сообщение с вложениями и сообщение MTOM - это одно и то же?


person William Niu    schedule 27.07.2011    source источник
comment
В основном речь идет об интероперабельности. Вы хотите иметь интероперабельный сервис? Используйте Мтом. Вы хотите вызывать службу только из клиента WCF? Используйте двоичное кодирование сообщений.   -  person Ladislav Mrnka    schedule 27.07.2011


Ответы (1)


MTOM — это стандарт, который использует сообщения, закодированные с помощью mime, состоящего из нескольких частей, для отправки больших частей сообщения, которые были бы слишком дорогими для кодирования base64 как чистого двоичного кода. Само сообщение SOAP отправляется как начальная часть сообщения и содержит ссылки на двоичные части, которые программный стек веб-службы, такой как WCF, затем может собрать вместе, чтобы создать единое представление сообщения.

Двоичное кодирование является полностью собственностью WCF и действительно имеет отношение не только к большим сообщениям. Он представляет собой двоичное представление XML Infoset, которое гораздо более компактно и быстрее для анализа, чем текстовые форматы. Если вы отправляете большие бинарные блоки данных, то они просто совпадают с другими отправляемыми байтами.

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

person Drew Marsh    schedule 27.07.2011
comment
Спасибо за подробный ответ! Итак, является ли MTOM просто сообщением SOAP с вложениями, подобными вложениям в сообщениях SMTP? - person William Niu; 28.07.2011
comment
@Drew Marsh, но как он может включить в него двоичные данные (без декодирования в базу 64), а затем отправить их по http? - person Royi Namir; 22.10.2011
comment
У вас есть пример кода, как прикрепить двоичный файл как MTOM в WCF? - person Ravi; 25.04.2016