WCF ConcurrencyMode.Multiple Connection лучшие практики и кэширование - PullRequest
1 голос
/ 23 октября 2009

У меня есть сервис WCF со следующими настройками:

  • NetNamedPipeBinding
  • ConcurrencyMode.Multiple
  • InstanceContextMode.Single

Теперь у меня есть клиент, который обращается к этой службе WCF многопоточным способом.

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

  • В таком случае, насколько дорогой вызов Open() (услуга на том же компьютере )?
  • Должен ли я кэшировать / объединять мой класс клиента? ( получено из ClientBase) или WCF предоставляет прозрачный пул для соединений, аналогичных SQLConnection Pooling?

Ответы [ 2 ]

3 голосов
/ 23 октября 2009

WCF, к сожалению, не объединяет клиентские соединения.Я обнаружил, что Open () является относительно медленным и создал свои собственные механизмы объединения, сохраняющие несколько постоянных соединений открытыми между клиентом и сервером.

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

1 голос
/ 23 октября 2009

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

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