После прочтения некоторой литературы о WCF так и не понял кое-что.
Задача. Локальная сеть с 10 компьютерами. Решил производить некие манипуляции с компьютерами, управляя ими с одного компьютера. Для этого решил использовать технологию WCF.
Вопросы:
Я хочу обойтись без всяких серверов и хостингов. На обычных компьютерах клиент-служба бы висела в памяти, а сервер-служба бы слушала их и давала бы сигнал. Как я понимаю, что для этого более подходит т.н. selfie-hosted.
И как узнают службы друг друга? Мне кажется, что сервер ждет и слушает, а клиент посылает сигнал, что он активен.
Извините, но хочу понять суть WCF на примере локальной сети.
Ответ
С сервера посылается мной команда всем компьютерам. 2. Остальные компьютеры принимают команду.
Для администрирования и удаленного управления на практике лучше использовать технологию WMI. Это потребует произвести некоторые настройки для разрешения удаленного взаимодействия на управляемых компьютерах, на этом работ с подчиненными машинами завершается. Теперь для управления можно использовать как обычную консоль или PowerShell, так и написать удобную оболочку на .NET. Для работы с WMI существует пространство имен System.Management в сборке System.Management.DLL. Небольшой пример можно подсмотреть в этом ответе
Заблокировать компьютер, "заморозив" клавиатуру и мышь, а также отключить возможность перезагружать компьютер. 2. Разблокировать компьютеры.
боюсь что это вряд ли возможно стандартными средствами, во всяком случае в .NET вы таких средств не найдете и придется подключать неуправляемые библиотеки, если таковые обнаружатся. Тем более не возможно защититься от перезагрузки кнопкой reset или отключением питания. Если бы Windows умел цеплять клавиатуру и мышь на ходу, можно было бы что-то придумать с временным отключением устройств, но это приведет к полной потере устройств ввода и необходимости в перезагрузке. Можно запустить специальную программу в режиме оболочки, и блокировать ввод на ней, но во-первых, такая "блокировка элементарно обходится и вернуться в рабочий стол не составляет труда если у вас есть диалоговые окна для открытия файлов, сомневаюсь что вы планируете работать без использования файлов; во-вторых вы лишаете своих пользователей возможности пользоваться другими программами. В общем, ИМХО, эта затея бесполезная. Я работал в школе, есть более эффективные методы удержать внимание, если это не ваш случай, чтож, приношу свои извинения, медиум из меня отвратительный %).
3 Выключать компьютеры.
Эту функцию прекрасно можно выполнять и из обычной консоли или оболочки. Равно как и включать, но для этого уже потребуется дополнительная настройка в BIOS
Можно ли все это прикрутить к WCF
Можно. Вам потребуется запустить сервис на управляемых машинах и обращаться к запущенным сервисам с "админской" машины. При этом фактически клиентом в данном случае будет программка для управления, а все управляемые - серверами. Для выполнения отдельных команд вам все равно придется обращаться либо к WMI, либо к WinAPI, т.к. управляемый код .NET далеко не всемогущ. Поэтому стоит или не стоит использовать WCF решать конечно вам, но задачи управления - не та область для которой он предназначен. В качестве альтернативы стоит посмотреть на службы Windows, которые также можно создавать в .NET, пользы от них будет существенно больше, да и отключить ее не так просто если все правильно сделать.
Если в сети есть домен с ActiveDirectory, то большую часть задач по контролю за действиями пользователя и конфигурированием рабочего места, можно переложить на групповые политики, что сильно снижает расход времени на индивидуальную настройку каждого рабочего места.
Зачем тогда вообще нужен WCF?
В основном для предоставления высокоуровневого API для доступа к различным ресурсам, таким например, как базы данных, для того чтобы отвязать клиента от конкретного вида БД. Т.е. клиентам не будет ни какой разницы что лежит за сервисом - Orace, MS SQL или просто набор файлов.
Надеюсь мне удалось дать обще представление о способах решения вашей задачи в целом.
Комментариев нет:
Отправить комментарий