Unmarshalling Error - PullRequest
       19

Unmarshalling Error

2 голосов
/ 03 февраля 2011

У меня есть довольно необычная (IMHO) ошибка, которая возникает, когда я пытаюсь сделать запрос к службе SOAP:

Ошибка демаршаллинга: неожиданный элемент (uri: "http://www.domain.com/ws/servicename/", local:" dummyArg "). Ожидаемые элементы: <{} dummyArg>

Метод, который я вызываю, имеет вид:

function GetData(const dummyArg: WideString): Array_Of_Data; stdcall;

У меня мало опыта с SOAP, поэтому я настолько близок к тому, чтобы сойти с ума, я не смог найти никакой полезной информации по этому вопросу. Не стесняйтесь задавать любые вопросы, которые могут ускорить процесс поиска проблемы.

РЕДАКТИРОВАТЬ: я использую Delphi 2010, и я назвал метод следующим образом: GetData(EmptyStr);, GetData('null'); и GetData('{}');

Спасибо за ваше время.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2011

Мне удалось найти чистое решение проблемы, просто замените опцию invoke в разделе инициализации модуля с ioDocument на ioHasNamespace или ioHasAllSOAPActions, и запрос SOAP будет сгенерирован правильно, например:

InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioDocument);

изменить на

InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasNamespace);

или

InvRegistry.RegisterInvokeOptions(TypeInfo(YourSoapInterface), ioHasAllSOAPActions);

Это самое чистое исправление, которое я мог найти для этой проблемы.

1 голос
/ 04 февраля 2011

Я предполагаю, что возникшее исключение имеет тип ERemotableException (http://docwiki.embarcadero.com/VCL/en/InvokeRegistry.ERemotableException) верно? Это означает, что Службе не понравился запрос, и он отправил обратно Сбой; среда выполнения SOAP, увидев ошибку, вызывает локальное исключение с сообщениемполучено.

Исходя из того, что сказала Служба,

Неустранимая ошибка: неожиданный элемент (uri: "http://www.domain.com/ws/servicename/", local:" dummyArg "). Ожидаемые элементы: <{} dummyArg>

... Я предполагаю, что клиент сгенерировал недопустимый запрос XML. Возможно, службе требуется поддержка некоторой конструкции XML / SOAP, которая не поддерживалась в 2010 г. Например, импортер / среда выполнения D2010Предполагается, что запрос / ответ пространства имен каждой операции совпадают с интерфейсом / типом порта. Это обычно имеет место, но не всегда. В Delphi XE это было решено путем добавления поддержки для регистрации пространства имен запроса / ответа, когда это необходимо.Можно исправить эти исправления в более раннем времени выполнения: проблема заключается в том, чтобы оценитьoblem.

Не могли бы вы опубликовать ссылку на WSDL Сервиса?Намного легче исследовать эти проблемы с доступом к WSDL.Спасибо.

Приветствия,

Бруно

0 голосов
/ 19 августа 2015

У меня была такая же проблема. И мое решение отличается от тех. Чтобы решить эту проблему, вы должны правильно установить параметры в диалоге импорта WSDL в Delphi. В моем случае я выбрал 2 дополнительные опции:

  • "Отображение чистых коллекций на типы классов-оболочек (-Ok)
  • Сопоставить строку с WideString (-Ow)

Перестройте приложение и ошибка исчезла. Надеюсь, это кому-нибудь поможет. enter image description here

...