Я пытаюсь отправить SOAP-запрос на веб-сервис в Delphi XE5. На самом деле есть WSDL, который я импортировал через WSDL Importer. Я установил соединение с этим веб-сервисом с помощью компонентов THTTPRIO (rio) и IdEncoderMIME1 для запроса аутентификации HTTP.
Запрос SOAP был построен с помощью TXMLDocument и имеет следующую структуру:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cod=NS_Codelist>
<soapenv:Header/>
<soapenv:Body>
<cod:GetLatestChangeDatesRequest>
<!--Zero or more repetitions:-->
<CodeListID>1035</CodeListID>
</cod:GetLatestChangeDatesRequest>
</soapenv:Body>
</soapenv:Envelope>
Кроме того, я получил тип порта веб-службы.
codeserv:= GetCodeListPortType(true,'',rio);
Это методы из WSDL:
codeserv.GetLatestChangeDates(const body:GetLatestChangeDatesRequestType):GetLatestChangeDatesResponseType
GetLatestChangeDatesRequestType = array of Int64;
GetLatestChangeDatesRequest = GetLatestChangeDatesRequestType;
GetLatestChangeDatesResponseType = array of CodeListLatestChangeDateType;
GetLatestChangeDatesResponse = GetLatestChangeDatesResponseType;
CodeListLatestChangeDateType
property CodeListID: Int64
property LatestChangeDate: TXSDate
Я уже пытался установить массив Int64 для параметра, но затем он говорит «элемент CodeListID отсутствует».
К сожалению, я не нашел способа отправить этот XML-запрос SOAP в веб-службу и получить ответ. Есть идеи?
РЕДАКТИРОВАТЬ: я пытался использовать методы WSDL
var
codeserv: CodeListPortType;
arrIDs: GetLatestChangeDatesRequest;
response: GetLatestChangeDatesResponse;
begin
codeserv:= GetCodeListPortType(true,'',rio);
SetLength(arrIDs,1);
arrIDs[0]:= 1035;
response:= codeserv.GetLatestChangeDates(arrIDs);
Но затем я получаю следующее сообщение об ошибке: «Обнаружено недопустимое содержимое, начиная с элемента« long ». Ожидается один из {{CodeListID} '.'
В SOAP-запросе должен присутствовать элемент CodeListID. К сожалению, похоже, что метод GetLatestChangeDates не создает элементы в запросе SOAP. Отправленный выше SOAP-запрос должен был быть создан с помощью этого метода (надеюсь).