Хороший механизм широковещательной передачи для внутренних приложений .net для объявления их местоположения и версии?

StackOverflow https://stackoverflow.com/questions/1821513

Вопрос

Я хотел бы предоставить большому количеству внутренних .net-приложений простой способ объявить, что они используются.Моя цель - отслеживать, какие пользователи могли бы воспользоваться проверками в службе поддержки и / или напоминаниями об обновлении.

Это в собственной сети.Определенно, между всеми машинами есть подключение по IP и, вероятно, UDP.(Но, вероятно, не многоадресная рассылка.)

Запись на известный внутренний ресурс или загрузка известного URL-адреса были бы возможны, но я хотел бы максимально свести к минимуму влияние на само приложение, даже в ущерб надежности.Поэтому я бы предпочел не рисковать таймаутом (например, если я обращаюсь к какому-то централизованному ресурсу, а он исчез), и в идеале я бы также предпочел не запускать рабочий поток.

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

Есть ли какой-нибудь механизм трансляции "включи и забудь", который я мог бы безопасно и эффективно использовать для этого?

Это было полезно?

Решение

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

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

Другие советы

Я сделал что-то похожее, но не совсем "braodcast"

У меня есть собственный инструмент, который используют несколько не технарей в компании. Я проверил сетевой ресурс на наличие определенного EXE-файла (того же EXE-файла, который вы бы скачали, если бы захотел его использовать) и сравнил номер версии этого файла с исполняемой сборкой. Если в сети новее, предупредите пользователя о загрузке нового.

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

Если обновление не является проблемой (т.е.нет случаев, когда использование старой версии было бы лучше), вы можете сделать то, что я сделал с чем-то подобным:

Приложение, которое люди фактически запускают, является программой обновления, оно проверяет версию файла и временную метку в общей сетевой папке и, если существует более новая версия, копирует ее в каталог программы.Затем он запускает программу (независимо от того, была она обновлена или нет).

var current = new FileInfo(local);
var latest = new FileInfo(remote);

if (!current.Exists)
    latest.CopyTo(local);

var currentVersion = FileVersionInfo.GetVersionInfo(local);
var latestVersion = FileVersionInfo.GetVersionInfo(remote);

if (latest.CreationTime > current.CreationTime || latestVersion.FileVersion != currentVersion.FileVersion)
    latest.CopyTo(local, true);

Process.Start(local)

Я также попросил саму программу проверить, нуждается ли программа обновления в обновлении (поскольку программа обновления не может обновиться сама из-за блокировки файлов)

После некоторых экспериментов я получил хорошие результаты, используя Win32 этот .

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top