У меня есть пара других вопросов, касающихся этой области, но теперь они немного излишни. Любые ответы на них также будут оценены, но этот вопрос является моей главной заботой в данный момент.
Я следил за множеством примеров того, как MTOM / XOP работает в WSE 3.0, и настроил свой проект именно так, как кажется необходимым. У меня есть поле массива байтов, которое обозначается как DataType: -base64Binary. В этом я помещаю массив байтов вложения, которое я хочу добавить. Когда я запускаю приложение и проверяю запрос, данные кодируются в виде base64, т.е. без элемента XOP Include и связанной части MIME.
Мое понимание MTOM в WSE 3.0 заключалось в том, что при кодировании он будет принимать любое поле, обозначенное как base64Binary, кодировать его как двоичный и перемещать его в часть MIME, заменяя его элементом XOP Include. То есть это просто сработало. Но я установил службу в справочном файле для наследования Microsoft.Web.Services3.WebServicesClientProtocol
и установил для флага RequireMtom
значение true, и он все еще не корректно кодируется.
Я что-то здесь упустил? Есть ли какие-либо другие шаги, которые должны быть реализованы, чтобы это работало?
РЕДАКТИРОВАТЬ: После просмотра моего кода в сотый раз, я задаюсь вопросом, может ли это быть связано с тем, что мне нужно сериализовать полезную нагрузку перед запуском метода ProcessMessage. Похоже, это может быть проблемой? Мы сериализовали причину, потому что метод, который мы должны использовать, принимает параметр «Payload», который имеет свойство content, это свойство content является свойством XMLElement, и единственный способ получить это - сериализовать требуемый класс. Но останавливает ли это MTOM, распознающий тип данных поля base64 и поэтому не преобразуемый в двоичный файл с частями MIME и XOP? Просто сейчас цепляюсь за соломинку.
РЕДАКТИРОВАТЬ 2: Хотя у меня есть решение ниже, сторонние компании сейчас говорят, что наши префиксы пространства имен неверны! У нас есть что-то вроде <q1:Attachment xmlns:q1="http://whatever" />
, и они требуют, чтобы это было <s:Attachment xmlns:s="http://whatever" />
. Я схожу с ума или это не имеет значения? Есть ли способ, которым я могу сказать, как назначить префиксы пространства имен?