Передача двоичных данных через веб-сервис SOAP?

У меня есть веб-служба, которая возвращает двоичный массив объекта. Есть ли более простой способ передать это с помощью SOAP или он должен содержаться в XML? Он работает, но мне пришлось увеличить буфер отправки и получения до большого значения. Сколько будет слишком много?

передача двоичного файла в XML в виде массива кажется действительно неэффективной ,но я не вижу способа добавить двоичное вложение.Сеть.

3 ответов


как массив? Вы хотите сказать, что посылаете

<byte>8</byte>
<byte>127</byte>

etc? Если это так, то вы можете улучшить его, предварительно преобразовав массив байтов в шестнадцатеричную строку, например.

<codedArray>087F09AFBD.....</codedArray>

Это наиболее распространенный подход для отправки изображений и т. д. через SOAP. Однако даже в этом случае вы правы, подвергая его сомнению. Вы действительно должны смотреть на другие, более спокойные протоколы передачи, ИМХО.


в протоколе HTTP вы отправляете одно сообщение типа MIME text / xml, которое содержит сообщение SOAP. Но протокол HTTP позволяет отправлять несколько сообщений, таких как электронное письмо, состоящее из сообщения и вложений. Это называется "мыло с насадками"http://en.wikipedia.org/wiki/SOAP_with_Attachments Это сделано с типом mime "multipart / related".

проверьте, что о том, как сделать с WCF http://msdn.microsoft.com/en-us/library/ms733742.aspx


ну, действительно, Вы не должны отправлять двоичную информацию с веб-сервисом. Это делает недействительным точку использования веб-сервиса, совместимость. В идеале вы должны сериализовать объект в xml-файле. Однако если вы отправляете информацию, которая по своей сути является двоичной, скажем, изображение, то вы можете наверняка поместить это в полезную нагрузку Вашего сообщения SOAP. Сколько информации на самом деле зависит от того, как долго вы хотите ждать и как быстро работает ваша сеть. Я не верю, что они существуют. фактическое ограничение на размер информации, которую вы можете отправить. Если это действительно много (50 meg+ кажется произвольно большим числом), то вы можете рассмотреть альтернативные транспортные протоколы, такие как потоковая передача его через сокет.