Win Service vs Win7
От: Alex Dav Россия  
Дата: 29.09.10 12:19
Оценка:
сделал Win Service которые периодически обращается к веб сервису, ставлю на XP под акаутном Network service все работает ОК,
ставлю так же под Win7 — без ошибок и предупреждений о чем то, но веб сервис не показывает что было обращение

Подскажит что можно покапать.
Спасибо.
Re: Win Service vs Win7
От: _FRED_ Черногория
Дата: 29.09.10 12:36
Оценка:
Здравствуйте, Alex Dav, Вы писали:

AD>сделал Win Service которые периодически обращается к веб сервису, ставлю на XP под акаутном Network service все работает ОК,

AD>ставлю так же под Win7 — без ошибок и предупреждений о чем то, но веб сервис не показывает что было обращение

AD>Подскажит что можно покапать.


А в сервисе никакой диагностики не предусмотрено? В случае ошибки как ведёт себя сервис — проглатывает и работает дальше или хотя бы логирует? Что тогда в логах?
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Win Service vs Win7
От: Alex Dav Россия  
Дата: 29.09.10 12:48
Оценка:
Здравствуйте, _FRED_, Вы писали:


_FR>А в сервисе никакой диагностики не предусмотрено? В случае ошибки как ведёт себя сервис — проглатывает и работает дальше или хотя бы логирует? Что тогда в логах?


вот код:

public partial class Service1 : ServiceBase
    {
        private Timer t = null;

        public Service1()
        {
            t = new Timer(10000);
            t.Elapsed += new ElapsedEventHandler(LetIP);

        }

        void LetIP(object sender, ElapsedEventArgs e)

        {
            LetThemIP.com.wincutter.www.GetIPService ser = new LetThemIP.com.wincutter.www.GetIPService();



            string res = "FALSE";

            IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

            string IP = "XXXX";
            foreach (IPAddress add in localIPs)
            {
                IP = add.ToString();
                res = ser.PutIP((object)IP);
            }

            if(res == "OK")
                OnStop();
        }
 
        protected override void OnStart(string[] args)
        {
            t.Start();
        }

        protected override void OnStop()
        {
            t.Stop();

        }
    }


что тут логирывать я незнаю
Re: Win Service vs Win7
От: Spiceman  
Дата: 29.09.10 13:07
Оценка: 1 (1)
Здравствуйте, Alex Dav, Вы писали:

AD>ставлю так же под Win7 — без ошибок и предупреждений о чем то, но веб сервис не показывает что было обращение


А как ты узнал, что без ошибок, если у тебя нет логирования? Твой сервис запустился. При запуске создал поток. В этом потоке попытался обратиться к веб-сервису и рухнул. Сервис остановился.
Нужно добавить try-catch и логировние ошибки.
Re[3]: Win Service vs Win7
От: _FRED_ Черногория
Дата: 29.09.10 13:23
Оценка: 1 (1) +1
Здравствуйте, Alex Dav, Вы писали:

_FR>>А в сервисе никакой диагностики не предусмотрено? В случае ошибки как ведёт себя сервис — проглатывает и работает дальше или хотя бы логирует? Что тогда в логах?

AD>вот код:
AD>что тут логирывать я незнаю

Для начала курим Q&A (aka FAQ): В чем разница между таймерами?
Автор: Odi$$ey
Дата: 25.01.07
и узнаём, что System.Timers.Timer реальные пацаны не используют. Выкидываем и прикручиваем System.Threading.Timer.

AD>        void LetIP(object sender, ElapsedEventArgs e)

AD>        {
               // Заворачиваем в try\catch (*)

AD>            LetThemIP.com.wincutter.www.GetIPService ser = new LetThemIP.com.wincutter.www.GetIPService();

AD>            string res = "FALSE";
AD>            IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
               // Трэйсим результат

AD>            string IP = "XXXX";
AD>            foreach (IPAddress add in localIPs)
AD>            {
AD>                IP = add.ToString();
AD>                res = ser.PutIP((object)IP);
                   // Трэйсим аргумент и результат
AD>            }

AD>            if(res == "OK")
AD>                OnStop();
               // !Останавливтаь сервис следует другим, 
               // открытым, методом ServiceBase::Stop().
AD>        }
 
AD>        protected override void OnStart(string[] args)
AD>        {
AD>            t.Start();
               // Трэйсим результат, если есть
AD>        }

AD>        protected override void OnStop()
AD>        {
AD>            t.Stop();
               // Трэйсим результат, если есть
AD>        }
AD>    }


(*) Оборачивать нужно всё, ибо следует внимательно читать документацию к используемым классам и их членам:

The Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event. This behavior is subject to change in future releases of the .NET Framework.


А то получилось, что вы сами написали нечто, про что никак не узнать — отчего же оно не работает и работает ли вообще
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Win Service vs Win7
От: Alex Dav Россия  
Дата: 29.09.10 14:56
Оценка:
Здравствуйте, Spiceman, Вы писали:

S>А как ты узнал, что без ошибок, если у тебя нет логирования? Твой сервис запустился. При запуске создал поток. В этом потоке попытался обратиться к веб-сервису и рухнул. Сервис остановился.

S>Нужно добавить try-catch и логировние ошибки.

Если бы он остановился — я бы вопросов не задавал — он работает.
Re[3]: Win Service vs Win7
От: Spiceman  
Дата: 29.09.10 15:14
Оценка:
Здравствуйте, Alex Dav, Вы писали:

AD>Если бы он остановился — я бы вопросов не задавал — он работает.


Да, тут уже FRED написал, что Timer глотает исключения. Вот и не падает. Я как-то упустил этот момент, так как обычно таймеры для таких целей не использую.
Re: Спасибо все
От: Alex Dav Россия  
Дата: 29.09.10 17:55
Оценка:
Проблема была прикольная — эксэпшн возникал в веб сервисе из за обреза строки при вставке в базу
в общем логирование форево
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.