Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];
ВнизЗагрузка XML из сети в службе TService Найти похожие ветки
← →
zorik © (2010-08-17 16:51) [0]Помогите разобратся. Создаю службу. В событии OnStart запускаю TThread который с интервалом 2 сек посылает ReportStatus ProcessRequests(false) и считает количество секунд. Приопределенном количестве (интервал приблизительно час) стартует второй TThread в котором загружаются данные их XML в инете (с сайта погоды).
Вот тут то и вся загвоздка. Я уже много перепробовал. Пробовал отдельно CoInitialize в секцию Synchronize засунуть и всю процедуру загрузки - не помогает. Пробовал создать тестовый пример с потоком и загрузкой в нем - там все работает, а в службе не хочет
← →
Медвежонок Пятачок © (2010-08-17 17:38) [1]И что характерно:
челу система говорит, что коинициалайз не был вызван, а чел настаивает на том, что был вызван.
и идет на форум.
← →
Сергей М. © (2010-08-17 17:38) [2]
> Вот тут то и вся загвоздка
"тут" это где ?
проблема-то в чем ?
> много перепробовал
> не помогает
Дустом их посыпать не пробовал ?)
> загружаются данные их XML в инете
Святым духом загружаются ?
Может соизволишь конкретизировать как они загружаются ?
← →
zorik © (2010-08-17 17:55) [3]
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;
← →
zorik © (2010-08-17 17:57) [4]
procedure TWeatherThread.Execute;
begin
Synchronize(LoadXML);
end;
← →
Медвежонок Пятачок © (2010-08-17 18:00) [5]и как ты определил, "в сервисе что не работает"?
← →
zorik © (2010-08-17 18:04) [6]
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:06) [7]Ну и как ты определил-то, что в сервисе не работает?
← →
zorik © (2010-08-17 18:07) [8]Я менял текст процедуры TWeatherThread.LoadXML на простой запись в файл -- все корректно работает -- пишет с нужным интервалом, пробовал в отдельном проекте создать поток и в нем считать данный в Synchrinize -- тоже все ок. А здесь висит на методе DOM.load(XMLLink) несколько минут и потом ошибка
← →
Медвежонок Пятачок © (2010-08-17 18:07) [9]if not DOM.load(XMLLink) then
raise Exception.Create("Ошибка");
обработка иф-нот конечно зашибенная.
информативная по самое нехочу.
← →
zorik © (2010-08-17 18:09) [10]
const XMLLink = "http://informer.gismeteo.ru/xml/33526_1.xml";
Не работает DOM.load(XMLLink)
← →
Медвежонок Пятачок © (2010-08-17 18:10) [11]здесь висит на методе DOM.load(XMLLink) несколько минут и потом ошибка
поди инет через прокси.
в браузере юзера он настроен и потому в простой приладе все работает
← →
zorik © (2010-08-17 18:11) [12]Согласен, что "очень информативно", переделаю, но там по-моему Acces Violation
← →
zorik © (2010-08-17 18:12) [13]Через прокси. Но сервис и тестовый пример я запускаю у себя на локальном компе
← →
Медвежонок Пятачок © (2010-08-17 18:12) [14]но там по-моему Acces Violation
а по моему если там АВ, то иф не пойдет по ветке иф-нот
← →
Медвежонок Пятачок © (2010-08-17 18:13) [15]Но сервис и тестовый пример я запускаю у себя на локальном компе
и чего из этого следует?
всем строиться?
← →
zorik © (2010-08-17 18:13) [16]Самое простое в планировщике заданий забить чтоб 4 раза в день запускать обычную екзешку)))
← →
Медвежонок Пятачок © (2010-08-17 18:16) [17]ну зачем же напрягать штатные средства винды?
здесь просто таки стопудово необходим самопальный сервис с десятью нитями.
Но сервис и тестовый пример я запускаю у себя на локальном компе
создай на компе нового юзера и зайди им.
браузер на настраивай. и сразу запусти тестовую программу (не сервис).
и будешь немного удивлен.
← →
zorik © (2010-08-17 19:43) [18]Спасибо! Завтра попробую. Кажется понял в чем причина
← →
zorik © (2010-08-18 09:29) [19]Так и есть! Под ненастроеным юзером не работает. Спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c