ServiceThrottlingBehavior.MaxConcurrentSessions Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или устанавливает значение, которое определяет максимальное количество сеансов, которые может принимать объект ServiceHost одновременно.
public:
property int MaxConcurrentSessions { int get(); void set(int value); };
public int MaxConcurrentSessions { get; set; }
member this.MaxConcurrentSessions : int with get, set
Public Property MaxConcurrentSessions As Integer
Значение свойства
Максимальное количество сеансов, принимаемых узлом службы. Значение по умолчанию в 100 раз больше числа процессоров.
Примеры
В следующем примере кода показано использование объекта ServiceThrottlingBehavior из файла конфигурации приложения, который, в качестве примера, устанавливает значение, равное 1 для свойств MaxConcurrentSessions, MaxConcurrentCalls, MaxConcurrentInstances. Оптимальные параметры для каждого конкретного приложения определяются фактическими условиями.
<configuration>
<appSettings>
<!-- use appSetting to configure base address provided by host -->
<add key="baseAddress" value="http://localhost:8080/ServiceMetadata" />
</appSettings>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="Throttled" >
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/SampleService"/>
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Throttled">
<serviceThrottling
maxConcurrentCalls="1"
maxConcurrentSessions="1"
maxConcurrentInstances="1"
/>
<serviceMetadata
httpGetEnabled="true"
httpGetUrl=""
/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Комментарии
Свойство MaxConcurrentSessions указывает максимальное количество сеансов, которые может принять объект ServiceHost. Важно понимать, что сеансы в этом случае не означают только каналы, поддерживающие надежные сеансы (например, объект System.ServiceModel.NetNamedPipeBinding поддерживает сеансы, но не включает надежные сеансы).
Каждый объект прослушивателя может иметь один ожидающий сеанс канала, который не учитывается в значении MaxConcurrentSessions , пока WCF не примет сеанс канала и не начнет обработку сообщений в нем. Это свойство особенно полезно в сценариях, где используются сеансы.
Когда это свойство имеет значение меньше числа потоков клиента, запросы от нескольких клиентов могут быть поставлены в очередь в одном подключении к сокету. Запросы от клиента, не создавшего сеанс со службой, будут заблокированы, пока служба не закроет свой сеанс с другими клиентами, если количество открытых сеансов службы достигло значения MaxConcurrentSessions
. Время ожидания необслуженных запросов клиента истекает, и служба закрывает сеанс без предупреждения.
Чтобы исключить эту ситуацию, запустите потоки клиента из различных доменов приложений, чтобы сообщения запросов приходили в различные подключения к сокетам.
Значения этого атрибута можно также задать с помощью <элемента serviceThrottling> в файле конфигурации приложения.