Лучший способ сохранить клиентское приложение .net обновленным со статусом другого приложения - PullRequest
1 голос
/ 07 июня 2010

У меня есть служба Windows, которая работает постоянно и выполняет некоторые действия каждые 15 минут.У меня также есть клиентское приложение WinForms, которое отображает некоторую информацию о том, что делает сервис.Мне бы хотелось, чтобы приложение форм обновлялось до недавнего состояния, но я не уверен, является ли опрос каждую секунду хорошим шагом с точки зрения производительности.

  • При запуске моя служба Windowsоткрывает именованный канал WCF для получения запросов (из моей клиентской формы)
  • Каждую секунду таймер в winform отправляет запрос в канал, а затем отображает результаты.Если канал отсутствует, форма показывает, что служба не работает.

Это лучший способ сделать это?Если мой сервис открывает канал при запуске, всегда ли он останется открытым (пока я не закрою его или мой сервис не остановится)?В дополнение к опросу службы, может быть, есть какой-то способ для службы уведомлять любые наблюдающие приложения об определенных событиях, таких как запуск и остановка обработки?Таким образом, я мог бы опрашивать меньше, так как я, вероятно, уже знал бы о больших событиях, и был бы только опросом о прогрессе.

1 Ответ

1 голос
/ 07 июня 2010

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

Вы уже опережаете кривую. WCF - это, безусловно, путь для приложений на основе .NET. А поскольку ваша форма и служба находятся в одной и той же системе, привязка именованного канала также используется. Теперь все, что вам нужно, это чтобы ваша служба публиковала события, включая периодические обновления статуса, которые ваша форма может прослушивать, когда она открыта.

Самый простой способ сделать это - использовать Juval Lowy Publish-Subscribe Framework . Отличительной особенностью этого фреймворка является то, что он отделяет издателя от подписчика. Издатель публикует события, не заботясь о том, есть ли подписчик или нет. Если подписчик присутствует, событие перенаправляется для его потребления. Исходя из вашего описания, я думаю, что это будет очень хорошо для вас.

...