InstanceContextMode по умолчанию в WCF
В WCF, если мы не указываем InstanceContextMode для ServiceBehaviour конкретно, каков режим по умолчанию для следующего?
- PerCall
- PerSession
- не замужем
Благодарю.
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, обрабатываются одним и тем же экземпляром объекта.
Деструктор вызывается, когда ссылка на объект уничтожается.
Сеансы обеспечивают аналогичное поведение между клиентами и службами, если используется поведение экземпляра службы по умолчанию.
Надеюсь, это поможет кому-то, так как мне понадобилось время, чтобы найти ответ.