Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки обновления Delphi 2007 до XE2: решение проблемы с URL-конечной точкой из WSDL

Delphi , Программа и Интерфейс , Процессы и Сервисы

При обновлении приложения, написанного на Delphi 2007, до версии XE2, пользователи могут столкнуться с проблемой, связанной с невозможностью получения URL-конечной точки для сервиса/порта. В данном случае, ошибка возникает при попытке взаимодействия с веб-сервисом, используя WSDL. В контексте этой статьи, рассмотрим, как решить данную проблему, основываясь на переживаниях разработчика, столкнувшегося с ней.

Описание проблемы

Разработчик сталкивается с ошибкой при попытке использовать веб-сервис, написанный на Delphi 2007, в проекте на Delphi XE2. Код, работавший без проблем в Delphi 2007, вызывает ошибку в XE2. Несмотря на попытки переимпортировать интерфейс и настроить порт и сервис, проблема остается.

Исходные данные

  • Ошибка при вызове метода CheckRegistration через веб-сервис.
  • Используемый WSDL и структура сообщений для вызова метода известны.

Пример кода

<operation name="CheckRegistration">
  <soap:operation soapAction="urn:ScubaUpdateWSIntf-IScubaUpdateWS#CheckRegistration" style="rpc"/>
  <input>
    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:ScubaUpdateWSIntf-IScubaUpdateWS"/>
  </input>
  <output>
    <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:ScubaUpdateWSIntf-IScubaUpdateWS"/>
  </output>
</operation>
<message name="CheckRegistration10Request">
  <part name="centreId" type="xs:int"/>
  <part name="centreName" type="xs:string"/>
  <part name="checkActiveOnly" type="xs:boolean"/>
</message>
<message name="CheckRegistration10Response">
  <part name="return" type="xs:boolean"/>
</message>

Вызов метода:

(HTTPRIO1 as IScubaUpdateWS).CheckRegistration(strtoint(tcentre), tcentreName, true);

Разбор проблемы

При использовании Delphi XE2, после обновления из Delphi 2007, возникает проблема, связанная с идентификацией сервисов и портов в WSDL. Это может быть вызвано изменением в способе обработки WSDL в новых версиях Delphi.

Подтвержденное решение

После ряда попыток и обсуждения с сообществом, было выявлено, что проблема заключается в том, что Delphi XE2 обнаруживает несколько сервисов с одинаковыми именами, тогда как Delphi 2007 обнаруживает только один. Это приводит к тому, что при автоматическом установлении WSDL-локации в коде, порты и сервисы сбрасываются.

Для решения проблемы можно использовать следующий код:

servicenames := TdomStrings.Create;
portnames := TdomStrings.Create;
HTTPRIO1.WSDLItems.GetServices(servicenames);
if servicenames.Count > 0 then
begin
  HTTPRIO1.Service := servicenames[0];
  HTTPRIO1.WSDLItems.GetPortsForService(servicenames[0], portnames);
  if portnames.Count > 0 then
    HTTPRIO1.Port := portnames[0];
end;
servicenames.Clear;
servicenames.Free;
portnames.Clear;
portnames.Free;

Альтернативное решение

В Delphi 10.3 необходимо явно установить свойства Port и WSDLLocation компонента HTTPRIO1 в рантайме. Это может быть выполнено, например, в событии Create формы.

HTTPRIO1.WSDLLocation := defWSDL;
HTTPRIO1.Service := defSvc;
HTTPRIO1.Port := defPrt;

Заключение

При обновлении приложения с Delphi 2007 на XE2, важно учитывать изменения в обработке WSDL и веб-сервисов. Внимательно проанализируйте конфигурацию сервисов и портов, а также убедитесь в правильной настройке свойств HTTPRIO в рантайме. Следуя советам из данной статьи, вы сможете успешно решить возникшую проблему.

Создано по материалам из источника по ссылке.

При обновлении приложения на Delphi с версии 2007 до XE2 возникла проблема с идентификацией сервисов и портов в WSDL, требующая коррекции настроек для восстановления работы веб-сервисов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:23:17/0.0060939788818359/0