Узел верхнего уровня SOAP отсутствует - PullRequest
2 голосов
/ 29 января 2011

Я импортировал WSDL (используя автоверсионное обнаружение ...), теперь, когда я пытаюсь использовать его, я получаю ошибку, похожую на «Отсутствует узел верхнего уровня, строка: 0», я потратил много часов на Google, чтобы найти решение для этого, и я видел, что многие люди сталкивались с такой же проблемой, однако я не мог найти решение для этого.

Я почти уверен, что многие из вас, разработчики, исправили эту проблему, поэтому мой вопрос КАК ?!

При импорте WSDL генерируется основной интерфейс с вспомогательными методами и специальной функцией, которая возвращает основной интерфейс, например:

type
  array_of_string = array of string;
  ASpecialInterface = interface(IInvokable)
    //...
    function ASpecialMethod(const dummyArg: string): array_of_string; stdcall;
    //...
  end;

и метод, который возвращает ASpecialInterface, пример:

function GetASpecialInterface(const UseWSDL: Boolean; const addr: string; const ahttprio: THTTPRio): ASpecialInterface;

вот моя проблема:

procedure TMyForm.OnAButtonClick(Sender: Tobject);
var 
  LArrayOfString: array_of_string;
  LSpecialIntf: ASpecialInterface;
begin
  // this works without any issue whatsoever
  LSpecialIntf := GetASpecialInterface; // I call it with default params
  // the next code raises the exception mentioned above
  LArrayOfString := LSpecialIntf.ASpecialMethod(EmptyStr); // no param passed since the dummyArg is dummy
end;

Теперь я не уверен, что это ценно, но соединение устанавливается с использованием SSL, т.е. https://domain.com/...

РЕДАКТИРОВАТЬ: Извините, забыл упомянуть, что я использую Delphi 2010

Спасибо всем за потраченное время.

1 Ответ

3 голосов
/ 29 января 2011

В Delphi 2010 есть ошибка в soaphttptrans.pas. Когда сервер по какой-либо причине не найден, вы получаете исключение EDOMParseError вместо ESOAPHTTPException, как это было раньше. Более подробную информацию можно найти здесь: https://forums.embarcadero.com/thread.jspa?threadID=44545&tstart=0

...