Как WCF заботится о множественных клиентских вызовах на сервер? - PullRequest
3 голосов
/ 23 декабря 2010

Хотите получить четкое представление о том, как работает WCF. Допустим, служба WCF выставила функцию А. Теперь клиент создает 5 потоков и в каждом из них вызывает функцию A с разными параметрами.

Я предполагаю, что это должно произойти - новый экземпляр функции A будет создаваться для каждого вызова потока этой функции. Может ли кто-нибудь это подтвердить? Я написал POC, который не делает этого, он дает противоречивые результаты.

Ответы [ 3 ]

5 голосов
/ 23 декабря 2010

Это зависит от конфигурации вашей службы через атрибут ServiceBehavior класса, реализующего ваш контракт на обслуживание:

[ServiceBehavior(
    InstanceContextMode = InstanceContextMode.PerSession, 
    ConcurrencyMode = ConcurrencyMode.Multiple)]

С параметром InstanceContextMode вы указываете WCF, как вы хотите разместить свой сервис:

  • Single : Будет создан один экземпляр вашего класса обслуживания, который будет принимать все вызовы обслуживания
  • PerSession : для каждого подключающегося клиента будет создан новый экземпляр
  • PerCall (по умолчанию): для каждого вызова каждого клиента будет создаваться новый экземпляр

Следующая вещь - это синхронизация, когда один объект хоста получает параллельные вызовы операций. Вы можете управлять поведением с помощью параметра ConcurrencyMode:

  • Одиночный (по умолчанию): WCF сериализует все операции, поэтому ваш экземпляр службы выполняет ровно один или ни одного вызова операции за один раз.
  • Reentrant : WCF делегирует все вызовы операций непосредственно вашему экземпляру службы, но синхронизирует вызовы с другим сервисом WCF внутри операции службы (я думаю, редко используется).
  • Несколько : WCF делегирует все вызовы операций экземплярам службы напрямую без синхронизации. Вы должны беспокоиться о синхронизации самостоятельно.
1 голос
/ 23 декабря 2010

По умолчанию для каждого вызова создается новый экземпляр вашей службы wcf, это задокументировано, например, здесь

0 голосов
/ 23 декабря 2010

Нет такого понятия, как новый экземпляр функции. Это был бы скорее экземпляр класса.

Вы можете настроить поведение службы, изменив соответствующий метаатрибут.

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

Здесь вы можете найти информацию о создании одиночного сервиса WCF

А здесь еще много информации об услугах WCF

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