Что означает «Нет преобразователя Native to Message»? - PullRequest
3 голосов
/ 10 ноября 2010

Мне нужно поговорить с каким-нибудь веб-сервисом, и поэтому я импортировал WSDL. Сейчас я пытаюсь вызвать его, но он сообщает об этом исключении: No Native to Message converter set
Очень, очень раздражает, тем более что у меня нет разрешения публиковать здесь фрагменты кода из этого сервиса. Тем не менее, нужно попробовать ... У кого-нибудь есть предложения о том, как исправить эту ошибку?


Ошибка генерируется в rio.pas в функции TRIO.Generic. Эта строка:

  if not Assigned(FConverter) then
    raise Exception.Create(SNoMessageConverter);

По неизвестным причинам FConverter установлен в ноль, таким образом генерируется исключение. Это происходит еще до того, как запрос отправлен. Сервису ничего не отправляется, поскольку Delphi падает до того, как сможет вызвать службу.


Параметры импорта WSDL, проверенные параметры:

  • Один результат - возвращение
  • Размотать буквальные параметры
  • Генерация деструкторов
  • Предупреждающие комментарии
  • Отображение строки в самую широкую строку
  • Генерация подробной информации о типах и интерфейсах
  • Игнорировать типы портов с помощью HTTP-привязок
  • Не выбрасывать неиспользованные типы
  • Проверка типов перечисления
  • Импорт типов ошибок
  • Импорт типов заголовков
  • Процесс включает и импортирует схемы
  • Создание псевдонимов классов как типов классов
  • Обрабатывать nillable и дополнительные элементы

На самом деле, моя система новая, Delphi была установлена ​​около 3 дней назад, и импорт этого WSDL был первым, что я сделал, в основном используя эти настройки по умолчанию.

1 Ответ

2 голосов
/ 10 ноября 2010

Используйте SoapUI, используйте WSDL и создайте фиктивный сервис.Направьте ваше приложение на ваш moapservice SoapUI, и вы можете захватывать свои исходящие запросы.Теперь вы можете развернуться и отправить эти запросы в службу и увидеть ответ.Это должно дать вам представление о том, откуда приходит сообщение.то есть он исходит из библиотеки SOAP Delphi в результате чего-то, чего он не понимает, или из самой веб-службы, в результате чего-то, что ИТ-отдел не понял в вашем запросе?

В качестве альтернативы вы можете сделать это в Delphi: перехватывать входящий / исходящий XML, используя события RIO_BeforeExecute / RIO_AfterExecute вашего объекта HttpRIO.

Если ваш трафик http (сложнее с SSL, но возможно), вы также можете перехватить его с помощью Fiddler2.

Получив необработанный XML, отправляйте запросы с помощью SoapUI и смотрите, что вы получите.Возможно, вы обнаружите, что ваши запросы нуждаются в «настройке», или, если в SoapUI все выглядит нормально, вам может потребоваться настроить ответы перед десериализацией.

...