2014-01-13 3 views
0

Я пишу. Net 3.5 решение, которое потребляет сторонний веб-сервис WCF. Прокси-клиент для службы SOAP был создан VisualStudio в качестве служебной ссылки.Как извлечь двоичное вложение из ответа SOAP WCF?

SOAP-ответ от службы включает вложения в данные, поскольку я вижу это в скрипаче. Вложения имеют поле href, которое указывает на ссылку CID. Прокси-клиент, созданный VS 2012 при возврате объекта, который включает вложения, не содержит двоичных данных, но он включает в себя поле href с ссылкой CID в нем.

В захвачено с использованием скрипача, это данные креплений ответа SOAP включая CID: ххая исй:

<attachments> 
     <cmn:attachment href="cid:52b2d8a50035921e80bf1540" len="309" name="DOC1.rtf" type="application/rtf" xmime:contentType="application/rtf"/> 
</attachments> 

И в сыром выходе в стельке, данные креплений можно увидеть с согласующей CID: ххое ссылка:

------=_Part_22_12445037.1389617382038 
Content-Type: application/rtf 
Content-Location: DOC1.rtf 
Content-ID: <52b2d8a50035921e80bf1540> 
Content-Transfer-Encoding: binary 

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 Calibri;}} 
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22 Doc 1\par 
\par 
Test information inside an attachment for KM retrieval.\par 
\par 
Here's something else I've written for use in testing.\par 
} 

Вот скриншот из доступных полей из возвращенного объекта:

fields available

Как получить доступ к данным вложений, чтобы я мог реально загрузить файл?

ответ

0

Оказывается, проблема возникла из-за того, что сторонний API возвращал ответ, данные MTOM были неправильно отформатированы, поэтому WCF игнорировал двоичные данные.

Способ, которым я обходился, состоял в использовании класса на заказ, который в основном использует HttpRequest для прямого общения с веб-службой и извлечения/анализа двоичных данных из ответа.

+0

Не могли бы вы поделиться с нами этим классом на заказ, пожалуйста? –

0

Как правило, с WCF и SOAP ваш двоичный файл файла закодирован как строка base64 где-то в вашем ответе, однако я не вижу в том, что вы разместили здесь, такую ​​длинную строку данных, которую я ожидал бы.

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

+0

Возвращенные данные из созданных прокси-серверов Visual Studio, которые создаются при создании ссылки на службу. Я очень внимательно посмотрел на возвращаемые данные, и я не вижу никаких байтовых массивов или длинной строки данных, которые могли бы предложить данные вложения. –

0

Не было бы проще вернуть байт [] в одном из объектов, которые вы возвращаете, а затем работать с тем, что на вашем клиенте, чтобы восстановить файл?

Вы используете MTOM? Потому что WCF does not support SwA (Soap with attachments) out of the box.

+0

Объекты были созданы автоматически визуальной студией, когда я создал ссылку на службу для веб-службы SOAP. Он использует MTOM (он выдает ошибку, когда я использую текст), и я использую BasicHttpBinding, это будет проблема? –

Смежные вопросы