Мы разрабатываем приложение для Windows Forms, которое будет установлено на 1000 сотрудников. Пользователи могут запускать несколько экземпляров приложения одновременно. Все клиенты находятся в одной интрасети.
Изменения в приложении могут вызвать изменения записей базы данных, которые, в свою очередь, должны быть переданы другим клиентам, чтобы их пользовательские интерфейсы были обновлены.
Наша команда рассказала о двух разных подходах:
1. Многоадресные пакеты
Исходный клиент изменяет записи и затем отправляет многоадресный пакет с полезной нагрузкой, если что-то изменилось. Другие клиенты получают это и получают указанные данные. Нам нужно учитывать случаи, когда пакет не получен, возвращаясь к активному извлечению данных.
Мой вопрос на данный момент: как клиент узнает, что он не получил пакет? (не знаю, чего вы не знаете) Что приводит нас к журналу событий с временными метками в базе данных, а элементы управления пользовательским интерфейсом отслеживают время последнего обновления. Они попадают в фокус, проверяют свои временные метки и обновляют по мере необходимости.
Кто-то еще сказал, что элементы пользовательского интерфейса будут просто перезагружаться каждый раз, когда они попадают в фокус (подумайте о режимах в перспективе, перенося элементы управления в начало рабочей области стека с CAB). И что многоадресная рассылка предназначена для обновления клиентов, что их текущий контекст изменился. Если они пропускают это, они работают с устаревшими данными, пока они не изменят режимы и не вернутся.
2. WCF и обратные вызовы
Клиенты регистрируются в контрактах WCF для обратных вызовов через привязку tcp. Основной технической проблемой является сервер, поддерживающий множество открытых сокетов. Мы прочитали о том, как он не открывается в традиционном смысле, его усыпляют максимум на 90 секунд, а затем восстанавливают в этот момент. Мы также читаем о максимальном количестве открытых соединений, которое может обрабатывать компьютер с Windows 2003 Server, и о том, как изменить это в реестре.
Если у нас есть 1000 соединений с открытым сокетом к серверу, это развалится?
Если кто-то сталкивался с такой же ситуацией и попробовал или оценил подход WCF, мы хотели бы услышать об этом.