Разработка клиент-серверного приложения для автоматического обновления клиентского программного обеспечения - PullRequest
1 голос
/ 05 февраля 2010

Я разрабатываю приложение, используя удаленное взаимодействие .NET 2.0. Он имеет один сервер и несколько клиентов, которые являются рабочими станциями или ноутбуками, которые могут быть включены или отключены в любое время.

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

Чтобы сделать передачу технически простой в удаленном взаимодействии, сервер загружает файл обновления с помощью File.ReadAllBytes в массив byte [], присоединяет его к удаленному объекту, затем клиент сохраняет его с помощью File.WriteAllBytes и использует Process. Начните установку msi с помощью / passive.

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

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

Основным недостатком клиента, извлекающего файл, является то, что многие клиенты могут перегружать сервер (размер передаваемого MSI-файла составляет 5 МБ, а может быть 200 клиентов), и хотя я мог запрограммировать клиентов на повторную попытку до успешного завершения на стороне сервера. По-видимому, не существует простого способа планирования количества полученных потоков удаленного взаимодействия, поскольку после того, как я загрузил пакет и возвратил управление в интерфейс удаленного взаимодействия на стороне сервера, нет простого способа определить, как долго будет происходить фактическая передача данных. принимает. Я рассмотрел очень много обходных путей, включая ограничение фактических соединений числом в течение определенного периода времени, но это никогда не будет отражать фактическую работоспособность ЛВС и все равно не будет идеей. Я мог бы, вероятно, использовать собственный приемник канала для контроля количества потоков (у меня уже установлен полный набор пользовательских приемников), но я бы хотел избежать этого, если это вообще возможно, потому что это должно быть последним средством. Для простоты я предпочел бы не допускать логику в приемники каналов.

Существуют ли какие-либо известные приложения .NET, которые предлагают этот тип автоматического обновления данных для клиентов, которые могут в любое время подключаться или отключаться?

1 Ответ

3 голосов
/ 05 февраля 2010

Для готового решения в .NET для поддержания клиентских версий программного обеспечения в актуальном состоянии ClickOnce, входящий в состав Visual Studio, выполняет довольно надежную работу. При запуске приложения приложение проверяет, была ли загружена обновленная версия на сервер. Если новая версия присутствует, она автоматически загрузит последнюю версию и установит.

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

...