2015-11-25 3 views
2

Мне было интересно, будет ли автоматически применяться дросселирование службы при использовании надежного сеанса. Я не мог найти окончательного ответа при поиске в Интернете и msdn.Включено ли включение WCF по умолчанию?

Я склонен думать, что вы должны положить <serviceThrottling /> в элемент <serviceBehavior />, чтобы он был включен.

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

Это мой вопрос в целом, но я также хотел бы узнать ответ для моей конкретной ситуации. Моя конфигурация в настоящее время имеет следующее поведение:

<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

Как вы можете видеть, что я не включаю <serviceThrottling /> элемента. Включен ли режим Throttling или я успешно предотвратил дросселирование этой конфигурации?

Edit:

Я только что проверил выполнения на сервере в OperationContext.Current.Channel.ChannelDispatcher.Endpoints.owner.ServiceThrottle и его значение равно нулю. Это заставляет меня больше склоняться к идее, что ServiceThrottling отключен.

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

+0

Может ли кто-нибудь предоставить подтвержденный ответ? –

ответ

2

Согласно <serviceThrottling> на MSDN, это значения по умолчанию:

MaxConcurrentCalls По умолчанию значение равно 16 * Количество процессоров. Установка значения 0 устанавливает значение Int32.MaxValue.

maxConcurrentInstances Значение по умолчанию является суммой maxConcurrentCalls и maxConcurrentSessions.

maxConcurrentSessions Значение по умолчанию - 100 * процессор. Установка значения 0 устанавливает значение Int32.MaxValue.

В вашем случае, если у вас было 4 процессора, ваш сервис будет поддерживать 64 одновременных вызова, 400 одновременных сеансов и 464 одновременных экземпляра.

Как правило, в моем опыте использования WCF используются значения по умолчанию, даже если вы не включаете пустой тег. Например, тег <security> можно опустить из привязки, и значения по умолчанию для безопасности будут использоваться в любом случае.

+0

Может ли он быть выключен? Или мне просто нужно указать число, подобное max Int32 во всех атрибутах? –

1

Чтобы найти ответ, мы сделали некоторые тесты нагрузки и пришли к выводу, что даже если вы не добавить раздел <serviceThrottling /> в конфигурационный файл, и даже несмотря на то, ServiceThrottling свойство на конечной точке является null при наблюдении в Debug, WCF все еще делает дросселирование и использует значения по умолчанию, как указано Тимом для этого.