Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1241429837
Zalum
2009-05-04 13:37
2010.11.14
Обмен данными между приложениями


15-1280704083
Германн
2010-08-02 03:08
2010.11.14
Win 7. №2


10-1169798225
tytus
2007-01-26 10:57
2010.11.14
ExcelApplication.RemoteMachineName


2-1282152063
zlodey
2010-08-18 21:21
2010.11.14
список IXMLNode


10-1169756215
Asail
2007-01-25 23:16
2010.11.14
Неполный список книг в Excel 2003





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский