Поток WCF NetTcpBinding ограничен одним экземпляром канала - PullRequest
0 голосов
/ 27 марта 2019

У меня есть собственный сервер WCF, настроенный с помощью NetTcpBinding.

Служба и контракт настроены с помощью:

  • SessionMode: разрешено
  • InstanceContextMode: PerCall
  • ConcurrencyMode: Multiple

TcpTransport настроен как Streamed

Я реализовал IChannelInitializer для реализации элементарного счетчика.

Однако, похоже, что IChannelInitializer вызывается только один раз.

Если я изменяю Транспорт на Buffered, тогда вызывается IChannelInitializerкаждый запрос.

В соответствии с этой статьей :

При потоковой передаче вызовов с привязкой на основе сеанса может возникнуть непредвиденное поведение.Все потоковые вызовы выполняются через один канал (канал дейтаграмм), который не поддерживает сеансы, даже если используемая привязка настроена на использование сеансов.Если несколько клиентов выполняют потоковые вызовы к одному и тому же объекту службы через привязку на основе сеанса, а режим параллелизма объекта службы установлен на один, а его контекстный режим экземпляра установлен на PerSession, все вызовы должны проходить через канал дейтаграммы, и поэтому только один вызовобрабатывается за один раз.Время ожидания одного или нескольких клиентов может истечь.Вы можете обойти эту проблему, установив контекстный режим экземпляра сервисного объекта на PerCall или Concurrency на Multiple.

Так что PerCall не должно гарантировать, что экземпляр создается для каждого вызовасогласно последнему предложению?

Использую ли я сеансы?Мой клиент создает экземпляр Proxy для каждого вызова, поэтому я не ожидаю поведения сеанса.

...