Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Возможно ли реализовать такое в .NET? / 25 сообщений из 35, страница 1 из 2
05.03.2016, 20:23
    #39186552
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Есть WinForms приложение.
Его функционал (к примеру) - пинг машин в корпоративном домене.
И вот пользователь создал в приложении два объекта для пинга - Comp1 и Comp2.
Самое главная особенность - программа должна давать пользователю выбор - через какой интвервал какую машину нужно пинговать.
К примеру доступность Comp1 пользователь хочет мониторить раз в минуту, а доступность Comp2 - раз в 15 минут.
Как это реализовать на .NET? Создавать для каждого очередного Comp[number] объект Timer программно? Но как тогда при этом создать для каждого такого нового Timer'а событие Timer_Tick? И не просто Timer_Tick, а Timer_Comp(конкретный номер)_Tick...

В общем, пока смутно себе это представляю и что то совсем зарылся..
Возможно кто то уже сталкивался с такой задачей, большая просьба помочь или хотя бы натолкнуть на мысль - куда копать?
...
Рейтинг: 0 / 0
05.03.2016, 20:31
    #39186557
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Запускаешь ping.exe, читаешь что он выводит и парсишь.
...
Рейтинг: 0 / 0
05.03.2016, 20:35
    #39186559
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Dima TЗапускаешь ping.exe, читаешь что он выводит и парсишь.
это по юниксовому будет :)
-----------
таймер один, можно ежесекундный, запросы посылать асинхронно (Ping.SendAsync), при неудаче несколько попыток делать
...
Рейтинг: 0 / 0
05.03.2016, 20:43
    #39186564
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Пинг машин - это как пример..В итоге данное приложение будет считывать данные с различных веб-сервисов.
Только вот как это реализовать..чтобы ВебСервис1 читался каждую минут, ВебСервис2 каждые 15ть итд (вобщем интервал ставит сам пользователь через интерфейс) - непонятно...
...
Рейтинг: 0 / 0
05.03.2016, 20:47
    #39186565
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
С dispatch timer может сработать такая задумка?
...
Рейтинг: 0 / 0
05.03.2016, 21:17
    #39186575
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту.
Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга.
Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number].
И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем...

Не задохнется ли каждую минуту так отрабатывать?
...
Рейтинг: 0 / 0
05.03.2016, 21:19
    #39186576
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Так примерно

Код: c#
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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace AddressesPing
{
    class Program
    {
        const int pingDiskret = 1 /*Минута*/ * 1000 /*Милисекунд*/;

        static Timer timer = new Timer(pingDiskret);
        static long counter = 0;
        static List<CompInterval> compInterval = new List<CompInterval>();
        static void Main(string[] args)
        {
            timer.Elapsed += Timer_Elapsed;
            compInterval.Add( new CompInterval("sql.ru", 1));
            compInterval.Add(new CompInterval("ya.ru", 4));

            timer.Start();
            while (true) ;

        }

        private static void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            
            List<Task> t = new List<Task>();
            foreach (CompInterval ci in compInterval)
            {
                t.Add( Task.Factory.StartNew(()=> ci.PingAddress(counter)));
            }
            if (counter++ == long.MaxValue)
                counter = 1;
        }
    }

    class CompInterval
    {
        string address;
        long interval;

        public CompInterval(string address, long interval)
        {
            this.address = address;
            this.interval = interval;
        }

        public void PingAddress (long counter)
        {
            if (counter % interval == 0)
            {
                Ping ping = new Ping();
                PingReply reply = ping.Send(address, 400, new byte[] { 0, 0, 0, 0 });
                if (reply.Status == IPStatus.Success)
                {
                    //Тут делаем что надо
                    Console.WriteLine(address);
                }
            }
        }
    }
}
...
Рейтинг: 0 / 0
05.03.2016, 21:23
    #39186579
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Cat2
Код: c#
1.
 const int pingDiskret = 1 /*Минута*/ *60* 1000 /*Миллисекунд*/;
...
Рейтинг: 0 / 0
05.03.2016, 21:25
    #39186580
L.Otujktd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Хранить для объекта время следующего вызова его функционала и интервал(1 минута к примеру).По таймеру с таймаутом гораздо меньше самого маленького интервала проверять на соответствии текущего времени для всех объектов и времени планируемого следующего вызова. В случае совпадения дергаем функционал и смещаем время следующей проверки на значение интервала. Должно работать.
...
Рейтинг: 0 / 0
05.03.2016, 21:27
    #39186585
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
L.Otujktd,

правильно ли понимаю, это тоже самое что и я выше написал?
...
Рейтинг: 0 / 0
05.03.2016, 21:28
    #39186586
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Cat2,

Супер! Сейчас испробую...
...
Рейтинг: 0 / 0
05.03.2016, 21:30
    #39186587
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Santa89Не задохнется ли каждую минуту так отрабатывать?
Может да, а может - нет. Пробовать надо.

Нечто аналогичное на шестистах вызовах у меня сдыхало
...
Рейтинг: 0 / 0
05.03.2016, 21:33
    #39186590
L.Otujktd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Santa89Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту.
Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга.
Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number].
И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем...

Не задохнется ли каждую минуту так отрабатывать?
Можно заменить таймер на Thread.Sleep и делать многопоточную обработку.
...
Рейтинг: 0 / 0
05.03.2016, 21:35
    #39186591
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Cat2,

ну будем тестить.
в реале будет примерно штук 20-30 таких Comp[number] которых нужно будет мониторить в разные интервалы.
отклик (то, что в я в топике называл пингом) у них будет быстрый - меньше одной секунды.
правда при этом еще и запись в базу о времени каждого пинга по каждому объекту будет..
...
Рейтинг: 0 / 0
05.03.2016, 21:41
    #39186594
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Santa89в реале будет примерно штук 20-30 таких Comp[number
Тогда потянет. Возможно в этом случае совет Изоприла про Ping.SendAsync будет даже лучше
...
Рейтинг: 0 / 0
05.03.2016, 21:42
    #39186596
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
чем использование Task
...
Рейтинг: 0 / 0
05.03.2016, 21:46
    #39186597
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Cat2,

в реале не будет никакого пинга, будет чтение данных из нескольких веб-сервисов с разными интервалами
...
Рейтинг: 0 / 0
05.03.2016, 21:51
    #39186600
L.Otujktd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
А если список CompInterval модифицируется в процессе работы?
...
Рейтинг: 0 / 0
05.03.2016, 21:53
    #39186602
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
L.OtujktdА если список CompInterval модифицируется в процессе работы?

Это только пример.

Реально я бы считывал его из БД внутри Timer_Elapsed
...
Рейтинг: 0 / 0
05.03.2016, 22:05
    #39186606
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Santa89Cat2,

в реале не будет никакого пинга, будет чтение данных из нескольких веб-сервисов с разными интервалами

Ну что сказать. Вы стали на шаткую дорожку сетевого взаимодействия

У Вас впереди множество ошибок, разочарований в декларируемых возможностях сетевых инструментов и побед над ними.

Желаю удачи!
...
Рейтинг: 0 / 0
05.03.2016, 22:05
    #39186607
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
L.OtujktdSanta89Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту.
Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга.
Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number].
И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем...

Не задохнется ли каждую минуту так отрабатывать?
Можно заменить таймер на Thread.Sleep и делать многопоточную обработку.
только лучше использовать await Task.Delay() или Task.Delay().Wait()
...
Рейтинг: 0 / 0
05.03.2016, 22:56
    #39186635
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
L.OtujktdМожно заменить таймер на Thread.Sleep и делать многопоточную обработку.

Thread.Sleep можно использовать только для отладки приложения, в виде заглушки для пока нереализованных функций.

В остальных случаях надо использовать или асинхронные вызовы или таски.
...
Рейтинг: 0 / 0
05.03.2016, 23:52
    #39186672
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Cat2L.OtujktdМожно заменить таймер на Thread.Sleep и делать многопоточную обработку.

Thread.Sleep можно использовать только для отладки приложения, в виде заглушки для пока нереализованных функций.

В остальных случаях надо использовать или асинхронные вызовы или таски.
+127
никакой рукопашной многопоточки и слипа
...
Рейтинг: 0 / 0
06.03.2016, 00:22
    #39186685
Santa89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Ну так что, моя идея с одним контроллом Time вобще отпадает чтоли?
...
Рейтинг: 0 / 0
06.03.2016, 00:39
    #39186690
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно ли реализовать такое в .NET?
Santa89у так что, моя идея с одним контроллом Time вобще отпадает чтоли?
а контрол то здесь причём? Это который мышкой на форму кидают?

нужен таймер - одна штука для запуска задач, тикающий раз в секунду, например.
далее - расписание задач, запуск, отслеживание таймаутов и ошибок
ЗЫ это один из вариантов.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Возможно ли реализовать такое в .NET? / 25 сообщений из 35, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]