Delphi 2007 неправильно использует веб-службу JAX-WS

StackOverflow https://stackoverflow.com/questions/462171

  •  19-08-2019
  •  | 
  •  

Вопрос

У меня возникла проблема с Delphi 2007 при попытке использовать веб-сервис, который я настроил на Java с использованием JAX-WS.Веб-сервис можно прекрасно использовать из другой программы Java и с веб-сайта на C # / ASP.NET 2.0.Однако, когда я пытаюсь получить доступ к той же службе с помощью импортера WSDL в Delphi 2007 (исправление от 17 декабря 2007 года), веб-служба JAX-WS не распознает ни один из параметров, которые я ей передаю, и обнуляет их.

Я проверил сообщение SOAP, которое передается Delphi, и сравнил его с другими , и они в значительной степени идентичны (за исключением некоторых незначительных значений пространства имен и целого ряда состояний просмотра из .ЧИСТЫЙ один!)

Я также побывал в Интернете (самой полезной ссылкой была ссылка доктора Боба http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798) но никакой радости.

Кто-нибудь сталкивался с этим раньше?

ТИА.


Сага продолжается!

Повозившись с объектом HTTPRIO, чтобы попытаться заставить его работать, я в конце концов сдался и попробовал прямую передачу XML по HTTP.Потерпеть неудачу.

Итак, я создал простой тестер на C # и попробовал это.Работает без проблем.

Используя Fiddler для просмотра того, что отправлялось взад и вперед, казалось, что разница была только в пространствах имен.Я изменил пространства имен в XML - отправке в Delphi и ...это работает!

Это был образец исходного XML-файла, генерируемого WSDLImporter:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <version xmlns="http://path.to.service.com/">
            <input>test</input>
        </version>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

и вот что на самом деле работает:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:version xmlns:ns2="http://path.to.service.com/">
            <input>test</input>
        </ns2:version>
    </S:Body>
</S:Envelope>

Итак, теперь, когда я это знаю, могу ли я изменить значения пространства имен для кода WSDLImporter?Я не вижу ничего очевидного в свойствах HTTPRIO.

ТИА

Это было полезно?

Решение

ХА-ХА-ХА, ОНО ЖИВЕТ!!!

В принципе, мне пришлось убрать рекомендованные

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

и заставьте его использовать раздел .5 кодирование.Пространства имен генерируются по мере необходимости, а параметры передаются веб-службе Java.

Правильно, нужно пиво, много пива :)

Другие советы

Вы должны просто прокомментировать эту строку в своем WSDL :

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

Этого достаточно...наслаждайся.

Не решение вашей проблемы, но недавно у меня были проблемы с такой же средой.Мне пришлось менять параметры много раз, пока я не нашел правильный способ использования веб-сервиса (написанный на C #).

Проверить:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

Я бился головой о стену в течение двух дней, пока не нашел этот пост...И подсказка Сезара, чтобы проверить THTTPRIO.Конвертер.Опции...Я перепробовал почти все, последним было установить soXXXXHdr в true -> затем произошло что-то странное, больше никаких нулей на сервере: O...

Я не знаю, почему эта настройка пропускает значения, она просто пропускает (по крайней мере, для меня).

Было бы здорово, если бы кто-то, кто действительно понимает, что происходит, объяснил это.

Удаление soSendMultiRefObj из Converter.Настройки помогают

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top