ServiceThrottlingBehavior.MaxConcurrentSessions Propriedade

Definição

Obtém ou define um valor que especifica o número máximo de sessões que um ServiceHost objeto pode aceitar de cada vez.

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

Valor de Propriedade

O número máximo de sessões que um anfitrião de serviço aceita. O padrão é 100 vezes o número de processadores.

Exemplos

O seguinte exemplo de código mostra a utilização de ServiceThrottlingBehavior de um ficheiro de configuração de aplicação que define as MaxConcurrentSessionspropriedades , MaxConcurrentCalls, e MaxConcurrentInstances para 1 como exemplo. A experiência real determina quais são as definições ótimas para cada aplicação em particular.

<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>

Observações

A MaxConcurrentSessions propriedade especifica o número máximo de sessões que um ServiceHost objeto pode aceitar. É importante compreender que sessões neste caso não significam apenas canais que suportam sessões fiáveis (por exemplo, System.ServiceModel.NetNamedPipeBinding suportam sessões mas não incluem sessões fiáveis).

Cada objeto ouvinte pode ter uma sessão de canal pendente que não conta para o valor de MaxConcurrentSessions até que o WCF aceite a sessão do canal e comece a processar mensagens nela. Esta propriedade é mais útil em cenários que utilizam sessões.

Quando esta propriedade é definida para um valor inferior ao número de threads do cliente, os pedidos de múltiplos clientes podem ser colocados em fila na mesma ligação socket. Os pedidos do cliente que não criou uma sessão com o serviço serão bloqueados até que o serviço feche a sua sessão com os outros clientes, caso o número de sessões abertas no serviço tenha atingido MaxConcurrentSessions. Os pedidos do cliente que não são atendidos acabam por expirar e o serviço encerra abruptamente a sessão.

Para evitar esta situação, execute os threads do cliente a partir de diferentes domínios de aplicação para que as mensagens de pedido entrem em diferentes ligações socket.

Também pode definir os valores deste atributo usando o <elemento serviceThrottling> num ficheiro de configuração da aplicação.

Aplica-se a