Как я могу удаленно выполнить программу на нескольких клиентах из веб-приложения? - PullRequest
1 голос
/ 21 декабря 2010

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

У меня есть веб-приложение asp.net на IIS в штаб-квартире.Когда происходит определенное событие, мне нужно показать сообщение на динамически выбранном подмножестве компьютеров по всей компании.Сообщение должно быть показано из-за временных ограничений этого процесса (время реакции 4 часа), и мы по закону не можем позволить себе не показывать сообщение.

Поэтому мне нужно сделать следующее:

  • Показать сообщение для пользователей.У меня есть приложение winforms, которое выводит диалоговое окно, в котором единственный способ избавиться от него - нажать большую кнопку «Подтвердить».
  • Чтобы убедиться, что сообщение было показано.Какой-то отчет о том, что да, он был показан и впоследствии подтвержден.
  • Способ реагирования, если форма не показана.

Я рассмотрел следующее:

  • PsExec - асинхронно перебирать все узлы в моем веб-приложении для запуска удаленного исполняемого файла, установленного на каждом ПК.
  • .NET Remoting - Я совсем не знаком с этим, и это побудило меня взглянуть на WCF.Будет ли это работать для того, что я пытаюсь сделать?
  • Обратные вызовы WCF - Кажется, для них требуется постоянное соединение, и я не уверен, что это значит для нашей инфраструктуры.Я представлял себе клиентскую службу, которая запускает приложение или каким-либо образом отображает форму.
  • Наше программное обеспечение для планирования (Tidal Enterprise Scheduler) - удаленное выполнение исполняемого файла.Это приведет к большему количеству точек отказа.

По мнению SO, как лучше всего решить эту проблему?Заранее спасибо за помощь.

Ответы [ 3 ]

4 голосов
/ 21 декабря 2010

Один из способов сделать это:

  1. Иметь клиентское приложение, установленное на каждом из рабочих столов
  2. Пусть это приложение (по событию по времени) вызовет веб-службу для получения любого сообщения, которое необходимо отобразить, или напрямую свяжется с сервером базы данных, чтобы получить сообщение, которое необходимо отобразить.
  3. После отображения сообщения приложение сообщит веб-службе или серверу sql, что оно было просмотрено. Запишите дату и время авторизованного пользователя.

Ваше веб-приложение должно просто хранить сообщение в базе данных; и, если вам нужно немного надежности, откройте веб-сервис, который вызывает приложение для настольных компьютеров, чтобы получить сообщения и пометить их как просмотренные. Это предотвратит необходимость общения настольных приложений напрямую с сервером sql И будет означать, что настольное приложение может быть установлено в любой точке мира.

Настольное приложение должно быть установлено таким образом, чтобы его нельзя было отключить / отключить / удалить. Есть множество способов сделать это.

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

UPDATE Несколько способов заблокировать приложение на макушке:

  1. Иметь службу контроля, которая запускается от имени администратора и следит за настольным приложением. Если он когда-либо был убит, заставьте его перезапустить. Вы можете сделать мониторинг через WMI. Некоторое программное обеспечение AV делает это. Обязательно отнимайте права у пользователей у прекращения предоставления услуг.
  2. Удаляет пользователям возможность использовать или получать доступ к диспетчеру задач. Многие варианты вирусов делают это, и это легко сделать из настроек групповой политики .
  3. Если они находятся в домене, убедитесь, что настройки вашей групповой политики принудительно устанавливают приложение для настольного компьютера и заставляют его автоматически запускаться при запуске Windows.

Если вы действительно хотите, чтобы оно было эффективным, сделайте следующее: Убедитесь, что ваше приложение уведомляет домашний сервер один раз в час, что оно работает. Попросите генерального директора отправить сообщение о том, что, если приложение когда-либо будет отключено, соответствующий сотрудник будет уволен. Они могут сформулировать это немного лучше, чем это. Регулярно запускайте аудиторские отчеты и увольняйте пару человек, чтобы напугать всех остальных. Я гарантирую, что никто не будет с этим винт после этого.

Убедитесь, что аудиторские отчеты подтверждены менеджерами ... В конце концов, сотрудника может не быть в этот день. ;)

1 голос
/ 21 декабря 2010

Исследуйте шаблоны публикации и подписки.Это может быть правильным решением для вас.По сути, это запуск службы, для которой все ваши приложения Windows будут регистрировать обратный вызов, а из вашего веб-приложения вы можете вызвать событие в службе, которое опубликует все зарегистрированные приложения.Издатель будет иметь логику для определения подмножества вашего ПК на основе события и источника.

1 голос
/ 21 декабря 2010

Приложение HQ может установить несколько записей в таблице, которая знает, каким клиентам нужно показать сообщение.

Message [ComputerName, IsAcknowledged]

Затем каждый клиент при необходимости будет просматривать эту таблицу, чтобы узнать, существует ли их имя_компьютераи IsAcknowleded == false.Если это так, покажите подсказку для подтверждения, обновите их запись

...