Как предотвратить автоматическую сериализацию байтового массива WCF как строки в кодировке base-64? - PullRequest
3 голосов
/ 25 октября 2010

При вызове службы мой клиентский код передает данные. Одним из членов данных является байтовый массив, поэтому WCF автоматически закодирует его в строку base-64 во время сериализации. Проблема заключается в том, что контракт данных службы ожидает байтовый массив, а не строку, поэтому десериализация данных приведет к исключению: Ожидается состояние «Элемент». Обнаружен «Текст» с именем «», пространство имен ''

Как мне обойти этот глюк?

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

Я не уверен, что понимаю, что вы имеете в виду?Как выглядит контракт на ваши услуги?Я очень сомневаюсь, что проблема заключается в сериализации base-64, если только ваш сервис не ожидает вместо этого двоичные данные, закодированные в шестнадцатеричном формате.

Помните, что вы используете здесь XML, поэтому двоичные данные не могут передаваться без кодировки;он должен быть сериализован в текстовый формат, который может быть встроен в конверт SOAP (если вы не используете MTOM), и это обычно Base-64.

0 голосов
/ 17 октября 2011

Мое решение состояло в том, чтобы вручную изменить автоматически сгенерированные контракты данных с байта [] на int [].XML теперь проходит проверку, потому что каждый элемент массива int помещается в отдельный элемент.

Недостатком является необходимость вручную изменять контракты данных, если вы повторно создаете файлы из WSDL.

0 голосов
/ 26 октября 2010

Это может быть вызвано несоответствием между клиентом и сервисом.Вы пытались обновить свой клиентский прокси (например, обновив ссылку на службу)?

...