Поделиться через


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> в файле конфигурации приложения.

Применяется к