Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обмен сообщениями в формате XML по протоколу HTTPS [D7, XP]


Страницы:   1 2 3

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо