InstanceContextMode по умолчанию в WCF

В WCF, если мы не указываем InstanceContextMode для ServiceBehaviour конкретно, каков режим по умолчанию для следующего?

  1. PerCall
  2. PerSession
  3. не замужем

Благодарю.

2 ответа

Решение

Документация о нем говорит о значении по умолчанию PerSession, Но я полагаю, что это также зависит от используемого связывания (поддерживает ли связывание сессий), например, от использования basichttpbinding PerCall

Ответ прост: режим 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, обрабатываются одним и тем же экземпляром объекта.

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

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

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

Другие вопросы по тегам