Повышение производительности служб WCF, работающих с данными в реальном времени - PullRequest
1 голос
/ 15 сентября 2010

В моем приложении мне нужно отправлять уведомления о событиях в реальном времени с сервера на клиенты.Количество данных для передачи очень мало, в основном и Id.Количество одновременно слушающих клиентов может составлять около 100, и мне, возможно, придется публиковать одно уведомление каждые 2-3 секунды.Сервер и клиент создаются с использованием .Net и WCF.

Учитывая эти требования, я создал набор служб WCF, которые будут работать на кластере серверов с балансировкой нагрузки.Контекстный режим экземпляра - Per Call, и нет необходимости в сеансах и т. Д.

В настоящее время я использую BasicHttpBinding.Будет ли TCP привязка лучше?Это работает на IIS 5 или 6?Если нет, то почему?

Какая конфигурация для сериализации может работать лучше всего?

Что нужно сделать, чтобы добиться максимальной производительности?

Редактировать- Добавление дополнительной информации на основе некоторых ответов -

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

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Во-первых, рассматривали ли вы использование обмена сообщениями для достижения своих целей?

В ответ на вопрос, будет ли TCP-связывание работать лучше, чем BasicHttpBinding, почти наверняка да. Если вы хотите использовать TCP, вы не можете использовать IIS- , чтобы заглянуть в WAS с Windows Server 2008. Если вы застряли с Windows Server 2003, вам придется вместо этого разместить в службе Windows .

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

Edit:

Теперь, когда вы обновили свой вопрос, я рекомендую взглянуть на Паб / Суб фреймворк IDesign , если вы хотите придерживаться WCF. Я бы также посмотрел на Pub / Sub с MSMQ в WCF , а также с продуктами "Vanilla", такими как Tibco RV .

0 голосов
/ 15 сентября 2010

Если вам нужно передать данные из сервиса клиентам, вам понадобятся сеансы и вам необходимо двустороннее связывание - NetTcpBinding или WSDualHttpBinding. Он не будет работать с BasicHttpBinding, потому что он позволяет только извлекать данные (клиент объединяет службу для изменений). Push-данные означают, что служба отправляет данные клиентам, когда это необходимо.

NetTcpBinding всегда создает сеанс. Это не может быть размещено в IIS 6 или старше. NetTcpBinding разрешен только в службе активации Windows (WAS), которая является расширением IIS 7.x. Для более старых систем вам необходим собственный хостинг = служба Windows.

Edit:

На основании вашего описания вам необходим шаблон обмена сообщениями "Публикация-подписка".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...