Передача двоичных данных через веб-сервис SOAP? - PullRequest
6 голосов
/ 15 апреля 2010

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

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

Ответы [ 3 ]

4 голосов
/ 15 апреля 2010

как массив? Вы имеете в виду, что вы отправляете

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

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

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

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

2 голосов
/ 12 апреля 2011

В протоколе 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

1 голос
/ 15 апреля 2010

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

...