Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.03.2019, 11:13
Dem1DA Dem1DA вне форума
Прохожий
 
Регистрация: 06.03.2019
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию И снова Indy

Здравствуйте, уважаемые форумчане. Третий день бьюсь над одной проблемой. Стоит задача получить данные о состоянии сервиса электронного правительства (консольное приложение).
Вот код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  program Project2;
 
//{$APPTYPE CONSOLE}
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,  IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdHTTP,
  StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc;
 
type soaper = class
 
  private
    XMLDocument1: TXMLDocument;
    XMLString : AnsiString;
    lService  : AnsiString;
    ResponseStream: TMemoryStream;
    InputStringList : TStringList;
    RootNode: IXMLNode;
  public
   furl:string;
    fileIN:AnsiString;
    constructor Create;
    function servicestate():string;
   end;
 
 
constructor soaper.Create;
  begin
     furl:='';
     fileIN:='';
  end;
 
function soaper.servicestate ():string;
var
   IdHTTP1: TIdHTTP;
   SSL: TIdSSLIOHandlerSocketOpenSSL;
   strok:string;
 
begin
 IdHTTP1 := TIdHTTP.Create(nil);
 idhttp1.HTTPOptions:=[];
 SSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
  ResponseStream := TMemoryStream.Create;
  InputStringList := TStringList.Create;
  IdHttp1.IOHandler:=SSL;
  XMLString := fileIN;
  lService := 'imessage_send';
 
  InputStringList.Add(XMLString);
 
  try
    IdHttp1.Request.Accept := '*/*';
    IdHttp1.Request.ContentType := 'text/XML';
    IdHTTP1.Post(furl, InputStringList, ResponseStream);
    responsestream.SaveToFile('d:\1_adv.xml');   //Dlya proverki
  finally
 
    XMLDocument1.LoadFromStream(responsestream);
    XMLDocument1.Active := true;
     RootNode := XMLDocument1.DocumentElement;
 
     strok:=RootNode.ChildNodes['SOAP-ENV:Body'].ChildNodes[0].ChildNodes[0].ChildNodes[5].ChildNodes[1].ChildNodes[0].text+
     ' '+RootNode.ChildNodes['SOAP-ENV:Body'].ChildNodes[0].ChildNodes[0].ChildNodes[0].ChildNodes[1].ChildNodes[0].text+
     ' ñîñòîÿíèå ñåðâèñà '+RootNode.ChildNodes['SOAP-ENV:Body'].ChildNodes[0].ChildNodes[0].ChildNodes[7].ChildNodes[1].ChildNodes[0].text+
     ' '+RootNode.ChildNodes['SOAP-ENV:Body'].ChildNodes[0].ChildNodes[0].ChildNodes[4].ChildNodes[1].ChildNodes[0].text;
 
    ResponseStream.Free;
    InputStringList.Free;
 
   end;
   idhttp1.Free;
   result:=strok;
 
end;
 
Function GetFile(const FileName : AnsiString) : AnsiString;
Var
 F : File;
 FSize : Longint;
begin
 Result:='';
 
 if not FileExists(FileName) then Exit;
 
 FileMode:=0;
 
 AssignFile ( F, FileName);
 Reset(F, 1);
 FSize:=FileSize(F);
 SetLength(Result,FSize);
 BlockRead(F, Result[1],FSize);
 CloseFile(F);
 
 FileMode:=2;
end;
 
var cl:soaper;
  t:string;
 
begin
 cl:=soaper.Create;
 cl.fileIN:= GetFile('servst1.xml');
 t:=cl.servicestate();
 showmessage(t);
end.

Самое интересное в том, что в файле d:\1_adv.xml я вижу ответ от сервиса. Все верно. Однако при парсинге кода заметил, что прога вылетает после

Код:
1
XMLDocument1.LoadFromStream(responsestream);

Со стандартной ошибкой "Accsess violation at address...."
Помогите пожалуйста... горю.
Спасибо всем, кто откликнется.
Ответить с цитированием
  #2  
Старый 07.03.2019, 16:23
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Попробуйте перед
Код:
1
XMLDocument1.LoadFromStream(responsestream);
Вставить
Код:
1
responsestream.Position := 0;
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025