C# - Windows Forms Application Monitor
Это, на самом деле, не проблема, но у меня есть такое требование, при котором мне нужно написать приложение для Windows на C#, которое будет контролировать все наши внутренние и внешние системы. Некоторые из этих систем являются веб-сайтами, а некоторые - приложениями для Windows, которые постоянно опрашивают данные в базу данных и из нее, включая вызовы soap api. Моему приложению необходимо отслеживать эти системы и уведомлять соответствующих пользователей о каждом простое и о том, как долго оно находится в автономном режиме.
Я сделал проект базы данных, используя SQL Server в качестве СУБД, но я застрял с точки зрения реализации. Какой подход я могу использовать для достижения этой цели? TCP/IP? Это приложение должно запускаться каждые х секунд.
Я создал несколько флагов внутри перечисления, которые будут постоянно проверять состояние приложения, если оно в порядке, в ошибочном состоянии или должно ли оно предупреждать пользователя. В дополнение к этому я также создал конструктор, который будет инициализировать все компоненты монитора службы через DLL.
Примерно так:
[Flags]
public enum ClientApplicationState
{
ERROR = 0,
WARNING = 1,
OK = 2
}
/// <summary>
/// Constructor which sets up and initalizes all the components for the Service Monitoring DLL
/// </summary>
/// <param name="applicationName">The Name Of The Application</param>
/// <param name="port">The port on which to listen to</param>
/// <param name="timerPeriod"> Optional time in milisecinds to overide the default update freq (default is 1000)</param>
public ServiceMonitor(string applicationName, short port, int timerPeriod = 1000)
{
_messages = new List<string>();
_state = ClientApplicationState.OK;
//TODO: Throw port exception
try
{
_monClient = new MonitoringClient(applicationName, ClientApplicationState.OK, "Starting Up",
Process.GetCurrentProcess().ProcessName, port);
}
catch (Exception e)
{
}
InitTimer(timerPeriod);
_updateTimer.Enabled = true;
}
Веб-сайты размещены и работают, а приложения Windows работают на нашем сервере Windows 2012 R2.
Как я могу подойти к этому?
1 ответ
Ваши вопросы слишком общие, чтобы отвечать. Но я думаю, что вам действительно нужно смотреть на "вещи", которые вы собираетесь отслеживать. И тогда вам нужно понять услуги (если вы хотите использовать такой подход, который кажется уместным).
Служба запускается и работает непрерывно (логически). Ваша идея запустить "каждые х секунд" немного вводит в заблуждение. Возможно, вы захотите, чтобы ваша служба "проверяла" каждые x секунд, но не путайте эту идею с выполняющимся приложением. И, конечно, вы должны быть в состоянии настроить эту частоту - еще одну функцию, которую вы должны запланировать.
Если честно, я пока не вижу цели создания базы данных. И на основании того, что я прочитал, я предлагаю вам перестать думать о реализации и начать думать об этом сервисе в целом. Где вы храните данные, не имеет значения в данный момент. Вам необходимо решить, что делает служба (а "отслеживать время простоя" - очень преждевременное требование), для каких "вещей" она выполняет эту услугу и как она будет реагировать. Что происходит, когда ваш сервис останавливается? Вы контролируете монитор? Кто его установит / настроит? Будет ли он предоставлять какую-либо информацию во время работы? И так далее.
И прежде чем идти дальше, кажется, что вам нужно написать довольно сложную услугу / систему. Что-то, что MS (и другие) уже сделали - как MS Operations Manager https://technet.microsoft.com/library/hh230741.aspx. Если вы собираетесь заново изобрести колесо (хотя бы частично), то это может помочь вам взглянуть на документацию, чтобы увидеть, что он делает, как он настроен, концепции, лежащие в его основе, и т. Д.