![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обмен сообщениями в формате XML по протоколу HTTPS [D7, XP]
Igor_VM © (2010-05-12 16:19:00)Добрый день, возникла необходимость в реализации программы для отправки xml-сообщений (и приёма ответа) по протоколу https через интернет. Предполагается, что взаимодействие происходит посредством вызова методов интерфейса, реализованного в виде Web-сервиса. Для защищенного обмена данными между web-сервисом и предполаемым ПО используется протокол SSL, который обеспечивает аутентификацию web-сервера и аутентификацию клиента (посредством клиентских SSL-сертификатов), а так же шифрование передаваемых данных.
Также из описания:
Доступ к web-сервису осуществляется по протоколам: SOAP 1.1, SOAP 1.2, каждый из которых в качестве базового транспортного уровня использует HTTPS.
Взаимодействие с Web-сервисом http-входа описано согласно спецификации WSDL. В SOAP пакетах должна применяться кодировка UTF-8.
Интерфейс http-входа поддерживает один метод Transaction. Методу передается XML, содержащий элемент ... с атрибутом ... и т.д.
Т.е. сам веб-сервис уже функционирует. Моя проблема это отправлять туда xml-сообщения с помощью модуля, которые предстоит написать.
Просьба кто сталкивался с подобными разработками поделиться соображениями, с чего начать, какие компоненты использовать и др. информацию. Заранее спасибо.
Медвежонок Пятачок (2010-06-02 16:49:00) [21]а что возвращено в statusText?
Медвежонок Пятачок (2010-06-02 16:48:00) [22]0 - Unitialized
1 - Loading
2 - Loaded
3 - Interactive
4 - Complete
Igor_VM (2010-06-02 16:30:00) [23]:) спасиб, теперь отправляется xmlhttp.readyState = 4, но статус 400, т.е. видимо ошибка загрузки документа, соответственно ответа не получаю.
Медвежонок Пятачок (2010-06-02 15:54:00) [24]xReq.xml и все.
Медвежонок Пятачок (2010-06-02 15:53:00) [25]какой в задницу комматекст?
посылаемый контент должен остаться валидным xml документом.
Igor_VM (2010-06-02 14:43:00) [26]Понял. Я по всякому пробовал - создавал XMLDocument и отправлял:
xmlhttp.send(XMLDocument.XML.CommaText);
, а также прописывал в коде саму xml-ку внутри функции. Результат был такой же. А как корректно, есть какой-нить пример (на форуме я похожего не обнаружил)?
Медвежонок Пятачок (2010-06-01 16:25:00) [27]xReq : IXMLDOMDOcument;
....
xmlhttp.send( xReq);
Интересно, зачем посылать серверу экземпляр IXMLDOMDOcument?
Оно ему надо?
Медвежонок Пятачок (2010-06-01 16:09:00) [28]Root element is missing.....
Igor_VM (2010-06-01 16:07:00) [29]Да, спасибо. На пустой запрос приходит ответ "
<?xml version="1.0"?>
<...Server was unable to process request. ---> Root element is missing...".
На непустой системная ошибка. Код ниже:
var
xmlhttp : IXMLHTTPRequest;
xReq : IXMLDOMDOcument;
xResp : IXMLDOMDOcument;
begin
xReq := CoDomDocument.Create;
xReq.async := false;
xReq.LoadXML('C:\...\filename.xml');
xmlhttp := CoXMLHTTP.Create;
xmlhttp.open('POST','web_service_url',False,EmptyParam,EmptyParam);
try
xmlhttp.send(xReq);
// xmlhttp.send(null);
except
ShowMessage('Err!');
end;
xResp := CoDomDocument.Create;
xResp.async := false;
if xResp.LoadXml(xmlhttp.responseText) then
ShowMessage(xResp.xml);
xmlhttp.abort;
end;
Как можно определить из-за чего появляется системная ошибка?
Медвежонок Пятачок (2010-06-01 15:43:00) [30]Ты: Предполагаю, что из-за того, что не подгружен файл сертификата (*.pfx).
Я : Предполагаю, что это ошибочное предположение.
Снова ты: Видимо, сертификат ни при чём.
Igor_VM (2010-06-01 13:57:00) [31]Если я отправляю xmlhttp.send(null); с пустыми параметрами, то получаю ответ. Видимо, сертификат ни при чём.
Igor_VM (2010-06-01 13:44:00) [32]Сертификат подгружен через мастер сертификатов. Если указаний на его использование в коде не должно быть, то как определить что именно за системная ошибка?
Медвежонок Пятачок (2010-06-01 12:15:00) [33]Предполагаю, что из-за того, что не подгружен файл сертификата (*.pfx).
Предполагаю, что это ошибочное предположение.
xmlhttp работает так же как и ие.
Для ие сертификат должен быть в системном хранилище и должен быть связан со своим приватным контейнером.
А связанным он может быть только будучи в системном хранилище.
Palladin (2010-06-01 12:11:00) [34]правой кнопкой в проводнике его использовать...
...эти люди, ЧП, пишут такие серьезные вещи, к которым их и на километр подпускать нельзя...
Igor_VM (2010-06-01 10:48:00) [35]Добрый день, пока возникает except на отправке xmlhttp.send(<XML_REQUEST_BODY>); - "системная ошибка -2146697208". Предполагаю, что из-за того, что не подгружен файл сертификата (*.pfx). Подскажите, плз, как его использовать? Спасибо.
Плохиш (2010-05-12 23:21:00) [36]
> Dennis I. Komarov © (12.05.10 17:44) [2]
>
>
> > Плохиш © (12.05.10 16:27) [1]
>
> Дык, он вроде как уже фунцикулирует...
Вообще-то там описано и создание клиентов, да и совсем удивительная вещь, для некоторых, как импортировать в свой проект wsdl.
Но потратить полчаса на беглый просмотр не по пацански, интересней часами на форуме сидеть, может и задача сама рассосётся...
Медвежонок Пятачок (2010-05-12 18:15:00) [37]uses MSXML2_TLB;
....
var xmlhttp : IXMLHTTPRequest;
xResp : IXMLDOMDOcument2;
begin
xmlhttp := CoXMLHTTP.Create;
xmlhttp.open('POST',<WEB_SERVICE_URL>,False,EmptyParam,EmptyParam);
//опционально изменяем хедер если сервису оно надо
//xmlhttp.setRequestHeader(<field_name>,<field_value>);
xmlhttp.send(<XML_REQUEST_BODY>);
xResp := CoDomDocument.Create;
xResp.async := false;
if xResp.LoadXml(xmlhttp.responseText) then
ShowMessage('вуаля'#13#10 + xResp.xml);
end;
Igor_VM (2010-05-12 18:04:00) [38]А можно с этого места по-подробнее:
"...создать экземпляр xmlhttprequest'a
выполнить send, получить и разобрать респонс" ? :) Шаблон xml-запроса у меня есть и заполнить данными не проблема.
Медвежонок Пятачок (2010-05-12 17:50:00) [39]ИМХО начать с изучения транспорта
А может тогда уж начать с изучения что такое электрический ток и как он течет по проводам?
:)
PS
посетить страницу описания сервиса.
взять шаблон xml запроса.
заполнить его данными.
создать экземпляр xmlhttprequest'a
выполнить send, получить и разобрать респонс.
Dennis I. Komarov (2010-05-12 17:44:00) [40]
> Плохиш © (12.05.10 16:27) [1]
Дык, он вроде как уже фунцикулирует...
> Igor_VM (12.05.10 16:19)
ИМХО начать с изучения транспорта, т.е. HTTP, SSL, HTTPS