Что такое режим контекста экземпляра по умолчанию? - PullRequest
22 голосов
/ 17 января 2011

Когда я не указываю InstanceContextMode в службе, каков режим экземпляра по умолчанию?

Ответы [ 3 ]

25 голосов
/ 17 января 2011
1 голос
/ 19 июня 2018

Простой ответ заключается в том, что режим Instancing по умолчанию равен PerSession

При условии:

  • Используемый тип сеанса поддерживает сеансы
  • См. [Поддержка сеанса типа привязки] (https://docs.microsoft.com/en-us/dotnet/framework/wcf/system-provided-bindings).
  • Если канал не создает сеанс, поведение будет таким, как если бы оно было PerCall.
  • Сервисный контракт разрешает сеансы - по умолчанию «Разрешено»

Вот предоставленный Microsoft пример с настройками по умолчанию, обязательно настроенными в коде. Пример поведения по умолчанию

[ServiceBehavior(  
AutomaticSessionShutdown=true,  
ConcurrencyMode=ConcurrencyMode.Single,  
InstanceContextMode=InstanceContextMode.PerSession,  
IncludeExceptionDetailInFaults=false,  
UseSynchronizationContext=true,  
ValidateMustUnderstand=true)]
public class CalculatorService : ICalculator { ... }

Я обнаружил, что чтение о сеансе в этой статье Microsoft ( Использование сеансов ) особенно полезно для понимания того, как сеансы открываются и закрываются и как это связано с экземплярами и параллелизмом.

По умолчанию клиент WCF создаст новый сеанс, который создаст экземпляр сервера, все вызовы на время сеанса называются диалогом и обслуживаются одним экземпляром (Instancing) сервера с одним потоком. (Параллелизм), посвященный этому сеансу / клиенту / разговору.

Если вы используете поведение экземпляра по умолчанию в WCF, все вызовы между клиентским объектом WCF обрабатываются одним и тем же экземпляром службы. Поэтому на уровне приложения вы можете думать о сеансе как о включении поведения приложения, аналогичного поведению локального вызова. Например, при создании локального объекта:

Конструктор называется.

Все последующие вызовы, сделанные для ссылки на объект клиента WCF, обрабатываются одним и тем же экземпляром объекта.

Деструктор вызывается, когда ссылка на объект уничтожается.

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

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

0 голосов
/ 17 января 2016

Не все привязки поддерживают режим PerSession, например basicHttpBinding, который по умолчанию поддерживает режим Percall.

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