Я разрабатываю приложение, используя удаленное взаимодействие .NET 2.0. Он имеет один сервер и несколько клиентов, которые являются рабочими станциями или ноутбуками, которые могут быть включены или отключены в любое время.
Часть проекта заключается в том, что на сервере хранится копия установщика клиента MSI. Планируется, что для первой установки клиенты будут развернуты с использованием групповой политики, но после установки клиентское программное обеспечение будет автоматически обновляться с сервера при каждом обновлении копии сервера.
Чтобы сделать передачу технически простой в удаленном взаимодействии, сервер загружает файл обновления с помощью File.ReadAllBytes в массив byte [], присоединяет его к удаленному объекту, затем клиент сохраняет его с помощью File.WriteAllBytes и использует Process. Начните установку msi с помощью / passive.
Вопрос разработки заключается в том, должно ли обновление быть перенесено с сервера или извлечено из клиентов. Выталкивание с сервера происходит быстрее, но оставляет недостаток в том, что клиенты могут находиться в автономном режиме, и в будущем может потребоваться обновление в случайный момент времени при каждом подключении. Извлечение из клиента является предпочтительным, поскольку оно позволяет клиентам автоматически обновлять себя по мере появления в сети.
Существует множество способов достижения этой цели, все они вызывают проблемы с версиями объектов, которые используются в вызове удаленного взаимодействия, и требуют, чтобы последующие версии сохраняли совместимость для обновляющих интерфейсов.
Основным недостатком клиента, извлекающего файл, является то, что многие клиенты могут перегружать сервер (размер передаваемого MSI-файла составляет 5 МБ, а может быть 200 клиентов), и хотя я мог запрограммировать клиентов на повторную попытку до успешного завершения на стороне сервера. По-видимому, не существует простого способа планирования количества полученных потоков удаленного взаимодействия, поскольку после того, как я загрузил пакет и возвратил управление в интерфейс удаленного взаимодействия на стороне сервера, нет простого способа определить, как долго будет происходить фактическая передача данных. принимает. Я рассмотрел очень много обходных путей, включая ограничение фактических соединений числом в течение определенного периода времени, но это никогда не будет отражать фактическую работоспособность ЛВС и все равно не будет идеей. Я мог бы, вероятно, использовать собственный приемник канала для контроля количества потоков (у меня уже установлен полный набор пользовательских приемников), но я бы хотел избежать этого, если это вообще возможно, потому что это должно быть последним средством. Для простоты я предпочел бы не допускать логику в приемники каналов.
Существуют ли какие-либо известные приложения .NET, которые предлагают этот тип автоматического обновления данных для клиентов, которые могут в любое время подключаться или отключаться?