SOAP запрос из файла

DushaU
Дата: 31.05.2017 17:27:19
Всем доброго время суток.
Подскажите, пожалуйста, можно ли передать запрос к web службе файлом XML?

Например
SOAPHttpConnector - это 'Microsoft Soap Type Library v3.0'.HttpConnector30
SoapSerializer - 'Microsoft Soap Type Library v3.0'.SoapSerializer30
SoapReader - 'Microsoft Soap Type Library v3.0'.SoapReader30


Заполняю свойства
SOAPHttpConnector.Property('EndPointURL','https://sadfasdf.ru')
SOAPHttpConnector.Connect();
SOAPHttpConnector.Property('WinHTTPAuthScheme','1');
SOAPHttpConnector.Property('AuthUser', Login);
SOAPHttpConnector.Property('AuthPassword', Password);
SOAPHttpConnector.Property('SoapAction', SoapAction);
SOAPHttpConnector.BeginMessage();
SoapSerializer.Init(SOAPHttpConnector.InputStream);
SoapSerializer.StartEnvelope();
SoapSerializer.SoapNamespace('пространство имен');
SoapSerializer.StartBody;

SoapSerializer.StartElement(Teg1);
SoapSerializer.WriteString('asdf');
SoapSerializer.EndElement;

SoapSerializer.EndBody;
SoapSerializer.EndEnvelope;
SOAPHttpConnector.EndMessage();

SoapReader.Load(SOAPHttpConnector.OutputStream);

И потом уже получаю файл ответа и парсю. Все работает.

Вопрос в том: если есть XML файл запроса с пространством имен, и структурой, можно подставить вместо этого кода:
SoapSerializer.StartElement(Teg1);
SoapSerializer.WriteString('asdf');
SoapSerializer.EndElement;


Вот не знаю как :( Подскажите, пожалуйста
Модератор: Просьба использовать тэги для оформления сообщения
skyANA
Дата: 31.05.2017 17:41:19
DushaU, Вы какие-то данные хотите передать в SOAP конверте?
DushaU
Дата: 31.05.2017 17:59:20
Просто имеется файл самого запроса
например:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://api.ru/schema/cdm/ws-definitions"
xmlns:base="http://api.ru/schema/cdm/base">
<soapenv:Header/>
<soapenv:Body>
<ws:getUnitListRequest>
<base:listOptions>
<base:count>10</base:count>
<base:offset>0</base:offset>
</base:listOptions>
</ws:getUnitListRequest>
</soapenv:Body>
</soapenv:Envelope>

И чтобы не писать
SoapSerializer.StartElement(ws:getUnitListRequest);
SoapSerializer.StartElement(base:listOptions);
SoapSerializer.StartElement(base:count);
SoapSerializer.WriteString('10');
SoapSerializer.EndElement;
SoapSerializer.StartElement(base:offset);
SoapSerializer.WriteString('0');
SoapSerializer.EndElement;
SoapSerializer.EndElement;
SoapSerializer.EndElement;

А взять именно из файла
DushaU
Дата: 31.05.2017 18:06:44
Просто пересмотрел множество сайтов, поиск по форуму тоже не нашел подходящего.
Возможно так в обще нельзя сделать
skyANA
Дата: 31.05.2017 18:26:20
DushaU
Просто имеется файл самого запроса
например:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://api.ru/schema/cdm/ws-definitions"
xmlns:base="http://api.ru/schema/cdm/base">
<soapenv:Header/>
<soapenv:Body>
<ws:getUnitListRequest>
<base:listOptions>
<base:count>10</base:count>
<base:offset>0</base:offset>
</base:listOptions>
</ws:getUnitListRequest>
</soapenv:Body>
</soapenv:Envelope>

И чтобы не писать
SoapSerializer.StartElement(ws:getUnitListRequest);
SoapSerializer.StartElement(base:listOptions);
SoapSerializer.StartElement(base:count);
SoapSerializer.WriteString('10');
SoapSerializer.EndElement;
SoapSerializer.StartElement(base:offset);
SoapSerializer.WriteString('0');
SoapSerializer.EndElement;
SoapSerializer.EndElement;
SoapSerializer.EndElement;

А взять именно из файла

Я не работал с SOAPHttpConnector, но походу надо в SOAPHttpConnector.InputStream тупо содержимое файла поместить.
skyANA
Дата: 31.05.2017 18:26:59
DushaU, документация-то есть по используемой Вами библиотеке?
DushaU
Дата: 31.05.2017 18:54:56
только на MSDN. Но там некоторых свойств не было описано
Roman Mejtes
Дата: 31.05.2017 19:09:10
1) Обычно Soap сервисы содержат WSDL файл, на основании которых можно сгенерировать код клиента.
2) Для доступа к Soap сервису можно использовать любой HTTP клиент с поддержкой POST\GET же?
DushaU
Дата: 31.05.2017 19:21:28
Да, все правильно.
У меня получается, что код запроса содержится в XML файле. Просто не могу найти метод, который может загрузить в запрос из файла, чтобы не парсить его и не писать

SoapSerializer.StartElement(Teg1);
SoapSerializer.WriteString('asdf');
SoapSerializer.EndElement;

Я наше метод WriteXML у 'Microsoft Soap Type Library v3.0'.SoapSerializer30, но он выдает ошибку. Просто неопознанная ошибка.

Т.е. есть исходный XML файл 1.xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://api.ru/schema/cdm/ws-definitions"
xmlns:base="http://api.ru/schema/cdm/base">
<soapenv:Header/>
<soapenv:Body>
<ws:getUnitListRequest>
<base:listOptions>
<base:count>10</base:count>
<base:offset>0</base:offset>
</base:listOptions>
</ws:getUnitListRequest>
</soapenv:Body>
</soapenv:Envelope>

И чтобы не писать в коде
SoapSerializer.StartElement(ws:getUnitListRequest);
SoapSerializer.StartElement(base:listOptions);
SoapSerializer.StartElement(base:count);
SoapSerializer.WriteString('10');
SoapSerializer.EndElement;
SoapSerializer.StartElement(base:offset);
SoapSerializer.WriteString('0');
SoapSerializer.EndElement;
SoapSerializer.EndElement;
SoapSerializer.EndElement;

А просто yfgbcfnm что-то типа этого:
SoapSerializer.WriteXML('C:\1.xml');

Я бы написал парсер, но вариаций запросов множество, а файлы генерируются и думал можно эти запросы взять сразу и отправлять в web службу
skyANA
Дата: 31.05.2017 19:25:03
DushaU, Вам не нужен SoapSerializer, так как не нужно сериализовать объект в XML, так как последний у Вас уже есть.
А нужно имеющийся XML отправить по HTTP, то есть через SOAPHttpConnector, насколько я понял.