![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка XML из сети в службе TService
zorik © (2010-08-17 16:51:00)Помогите разобратся. Создаю службу. В событии OnStart запускаю TThread который с интервалом 2 сек посылает ReportStatus ProcessRequests(false) и считает количество секунд. Приопределенном количестве (интервал приблизительно час) стартует второй TThread в котором загружаются данные их XML в инете (с сайта погоды).
Вот тут то и вся загвоздка. Я уже много перепробовал. Пробовал отдельно CoInitialize в секцию Synchronize засунуть и всю процедуру загрузки - не помогает. Пробовал создать тестовый пример с потоком и загрузкой в нем - там все работает, а в службе не хочет
zorik (2010-08-18 09:29:00) [1]Так и есть! Под ненастроеным юзером не работает. Спасибо!
zorik (2010-08-17 19:43:00) [2]Спасибо! Завтра попробую. Кажется понял в чем причина
Медвежонок Пятачок (2010-08-17 18:16:00) [3]ну зачем же напрягать штатные средства винды?
здесь просто таки стопудово необходим самопальный сервис с десятью нитями.
Но сервис и тестовый пример я запускаю у себя на локальном компе
создай на компе нового юзера и зайди им.
браузер на настраивай. и сразу запусти тестовую программу (не сервис).
и будешь немного удивлен.
zorik (2010-08-17 18:13:00) [4]Самое простое в планировщике заданий забить чтоб 4 раза в день запускать обычную екзешку)))
Медвежонок Пятачок (2010-08-17 18:13:00) [5]Но сервис и тестовый пример я запускаю у себя на локальном компе
и чего из этого следует?
всем строиться?
Медвежонок Пятачок (2010-08-17 18:12:00) [6]но там по-моему Acces Violation
а по моему если там АВ, то иф не пойдет по ветке иф-нот
zorik (2010-08-17 18:12:00) [7]Через прокси. Но сервис и тестовый пример я запускаю у себя на локальном компе
zorik (2010-08-17 18:11:00) [8]Согласен, что "очень информативно", переделаю, но там по-моему Acces Violation
Медвежонок Пятачок (2010-08-17 18:10:00) [9]здесь висит на методе DOM.load(XMLLink) несколько минут и потом ошибка
поди инет через прокси.
в браузере юзера он настроен и потому в простой приладе все работает
zorik (2010-08-17 18:09:00) [10]
const XMLLink = ' http://informer.gismeteo.ru/xml/33526_1.xml';
Не работает DOM.load(XMLLink)
Медвежонок Пятачок (2010-08-17 18:07:00) [11]if not DOM.load(XMLLink) then
raise Exception.Create('Ошибка');
обработка иф-нот конечно зашибенная.
информативная по самое нехочу.
zorik (2010-08-17 18:07:00) [12]Я менял текст процедуры TWeatherThread.LoadXML на простой запись в файл -- все корректно работает -- пишет с нужным интервалом, пробовал в отдельном проекте создать поток и в нем считать данный в Synchrinize -- тоже все ок. А здесь висит на методе DOM.load(XMLLink) несколько минут и потом ошибка
Медвежонок Пятачок (2010-08-17 18:06:00) [13]Ну и как ты определил-то, что в сервисе не работает?
zorik (2010-08-17 18:04:00) [14]
procedure TWeatherThread.LoadXML;
var
i: Integer;
T: TStringList;
y, m, d, h: Word;
begin
try
CoInitialize(nil);
DOM := CoDOMDocument.Create;
DOM.async := False;
if not DOM.load(XMLLink) then
raise Exception.Create('Ошибка');
nData := DOM.SelectSingleNode('MMWEATHER');
nReport := nData.SelectSingleNode('REPORT');
nTown := nReport.SelectSingleNode('TOWN');
...
except
on E:Exception do
begin
FErrCode := 1;
T := TStringList.Create;
if FileExists('C:\1.txt') then
T.LoadFromFile('C:\1.txt');
T.Add(DateTimeToStr(now) + ' - ' + E.Message);
T.SaveToFile('C:\1.txt');
T.Free;
end;
end;
Медвежонок Пятачок (2010-08-17 18:00:00) [15]и как ты определил, "в сервисе что не работает"?
zorik (2010-08-17 17:57:00) [16]
procedure TWeatherThread.Execute;
begin
Synchronize(LoadXML);
end;
zorik (2010-08-17 17:55:00) [17]
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := True;
TimerThread := TTimerThread.Create(True);
TimerThread.FreeOnTerminate := True;
TimerThread.Resume;
end;
procedure TTimerThread.Execute;
var
k: Integer;
begin
k := 0;
repeat
if k = 0 then
begin
WeatherThread := TWeatherThread.Create(True);
WeatherThread.FreeOnTerminate := True;
WeatherThread.Resume;
end;
k := k + 1;
if k >= 60 then k := 0;
sleep(2000);
Service1.ReportStatus;
Service1.ServiceThread.ProcessRequests(false);
until false;
end;
procedure TWeatherThread.LoadXML;
begin
CoInitialize(nil);
DOM := CoDOMDocument.Create;
DOM.async := False;
DOM.load(XMLLink)
nData := DOM.SelectSingleNode('MMWEATHER');
...
end;
Медвежонок Пятачок (2010-08-17 17:38:00) [18]И что характерно:
челу система говорит, что коинициалайз не был вызван, а чел настаивает на том, что был вызван.
и идет на форум.
Сергей М. (2010-08-17 17:38:00) [19]
> Вот тут то и вся загвоздка
"тут" это где ?
проблема-то в чем ?
> много перепробовал
> не помогает
Дустом их посыпать не пробовал ?)
> загружаются данные их XML в инете
Святым духом загружаются ?
Может соизволишь конкретизировать как они загружаются ?