Блокировка с помощью ConcurrencyMode.Multiple и InstanceContextMode.PerCall - PullRequest
4 голосов
/ 25 сентября 2011

Нужно ли реализовать собственную блокировку в службе WCF, которая использует ConcurrencyMode.Multiple и InstanceContextMode.PerCall или InstanceContextMode.PerSession? Так как новый объект ServiceContext создается при каждом вызове или новом сеансе, я должен думать, что я не буду, но я не уверен.

Пример:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession,
     IncludeExceptionDetailInFaults = false, MaxItemsInObjectGraph = Int32.MaxValue)]
public class ExampleService : IExample

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

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

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

См. Эту тему для получения дополнительной информации

2 голосов
/ 26 сентября 2011

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

Для PerCall, есливаш клиент использует сеансы и может отправлять несколько запросов одновременно (скажем, используя один и тот же прокси из множества потоков), тогда да, вам нужно будет заблокировать объекты, которые не являются поточно-ориентированными.Я предполагаю, что вы используете PerSession, потому что хотите сохранить состояние, поэтому вам нужно заблокировать методы / код изменения состояния.

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