2009-07-17 3 views
1

Мы разрабатываем приложение Windows Forms, которое будет установлено около 1000 сотрудников. Пользователи могут одновременно запускать несколько экземпляров приложения. Все клиенты находятся в одной интрасети.Windows Forms & WCF - Связь с клиентом

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

Наша команда говорила о двух разных подходах:

1. Multicast пакеты

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

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

Кто-то еще сказал, что элементы пользовательского интерфейса будут просто перезаряжаться каждый раз, когда они попадают в фокус (подумайте о режимах в Outlook, приведя элементы управления к передней части рабочего пространства стека с помощью CAB). И что многоадресная рассылка заключается в обновлении клиентов, которые изменили их текущий контекст. Если они пропустят это, они работают с устаревшими данными, пока они не изменят режимы и не вернутся.

2. WCF и Callbacks

Клиенты зарегистрироваться WCF контрактов на обратные вызовы более чем ТСР связывания. Основная проблема заключается в том, что сервер поддерживает множество открытых сокетов. Мы ознакомились с тем, как он не открыт в традиционном смысле, он укладывается спать максимум на 90 секунд, а затем восстанавливается в этой точке. Мы также читаем о максимальном количестве открытых подключений, которое может обрабатывать компьютер Windows 2003 Server, и о том, как изменить его в реестре.

Если у нас есть 1000 открытых соединений сокетов на сервере, это будет разваливаться?

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

ответ

1

Я не реализовал такую ​​ситуацию. Однако я бы подумал, что одно из дуплексных привязок не обязательно будет иметь большие накладные расходы.

Все зависит от того, сколько информации серверу необходимо отправить клиентам. Я понимаю, что вы сказали, что информация будет использоваться для обновления своего пользовательского интерфейса. Однако представляется возможным, что им может не понадобиться одинаковое количество информации одновременно. Например, если информация о западном регионе изменилась, все 1000 клиентов могут захотеть узнать, что есть изменения, и все они могут обновить информацию сводного уровня о западном регионе, но, возможно, только 1/4 из них могут необходимо увидеть детали изменения.

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

При необходимости вы можете совместно обновлять обновления. Если клиенты нужно обновлять только один раз в секунду, то вы можете скопировать изменения за последнюю секунду и отправить их сразу.

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

+0

Вы касаетесь многих вещей, о которых мы говорили и которые о них думаем, таких как периодические обновления. Вы подчеркиваете, что я не полностью описал окружающую среду, но это примерно 1000 пользователей в одной физической сети в географически смежных зданиях. Данные не охватывают несколько вертикальных областей, все пользователи в значительной степени смотрят на одни и те же данные, только некоторые из них могут редактировать элементы, а большинство не может, исключение является личным организационным модулем. Я думаю, что ваш ответ помогает, так что +1, но я посмотрю, пробовал ли кто-нибудь это и знает какие-либо проблемы с производительностью/ресурсами. Спасибо. – blu

+0

Отлично. На самом деле мне было бы интересно узнать об итогах этого; по крайней мере, любое доказательство концепции, которое вы можете сделать. Было бы замечательно, если бы вы заходили в блог (подсказка, подсказка). –

Смежные вопросы