ServiceThrottlingBehavior.MaxConcurrentSessions Propriedade

Definição

Obtém ou define um valor que especifica o número máximo de sessões que um objeto ServiceHost pode aceitar simultaneamente.Gets or sets a value that specifies the maximum number of sessions a ServiceHost object can accept at one time.

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

O número máximo de sessões que um host de serviço aceita.The maximum number of sessions a service host accepts. O padrão é 100 vezes a contagem de processadores.The default is 100 times the processor count.

Exemplos

O exemplo de código a seguir mostra o ServiceThrottlingBehavior uso de de um arquivo de configuração de MaxConcurrentSessionsaplicativo que define MaxConcurrentInstances as propriedades, MaxConcurrentCallse como 1 como um exemplo.The following code example shows the use of ServiceThrottlingBehavior from an application configuration file that sets the MaxConcurrentSessions, MaxConcurrentCalls, and MaxConcurrentInstances properties to 1 as an example. A experiência do mundo real determina quais são as configurações ideais para qualquer aplicativo específico.Real-world experience determines what the optimal settings are for any particular application.

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

Comentários

A MaxConcurrentSessions propriedade especifica o número máximo de sessões que ServiceHost um objeto pode aceitar.The MaxConcurrentSessions property specifies the maximum number of sessions a ServiceHost object can accept. É importante entender que as sessões, nesse caso, não significam apenas canais que dão suporte a sessões confiáveis (por exemplo System.ServiceModel.NetNamedPipeBinding , o oferece suporte a sessões, mas não inclui sessões confiáveis).It is important to understand that sessions in this case does not mean only channels that support reliable sessions (for example, System.ServiceModel.NetNamedPipeBinding supports sessions but does not include reliable sessions).

Cada objeto de ouvinte pode ter uma sessão de canal pendente que não conta com o MaxConcurrentSessions valor de até que o WCF aceite a sessão de canal e comece a processar mensagens nela.Each listener object can have one pending channel session that does not count against the value of MaxConcurrentSessions until WCF accepts the channel session and begins processing messages on it. Essa propriedade é mais útil em cenários que fazem uso de sessões.This property is most useful in scenarios that make use of sessions.

Quando essa propriedade é definida com um valor menor que o número de threads de cliente, as solicitações de vários clientes podem ser enfileiradas na mesma conexão de soquete.When this property is set to a value less than the number of client threads, the requests from multiple clients may get queued in the same socket connection. As solicitações do cliente que não criou uma sessão com o serviço serão bloqueadas até que o serviço Feche sua sessão com os outros clientes se o número de sessões abertas no serviço tiver atingido MaxConcurrentSessions.The requests from the client that has not created a session with the service will be blocked till the service closes its session with the other clients if number of open sessions on the service has reached MaxConcurrentSessions. As solicitações de cliente que não são atendidas atingiram o tempo limite e o serviço fecha a sessão abruptamente.The client requests that are not served get timed out and the service closes the session abruptly.

Para evitar essa situação, execute os threads de cliente de diferentes domínios de aplicativo para que as mensagens de solicitação entrem em conexões de soquete diferentes.To avoid this situation, run the client threads from different app domains so that the request messages go into different socket connections.

Você também pode definir os valores desse atributo usando o <> elemento perthrottling em um arquivo de configuração de aplicativo.You can also set the values of this attribute by using the <serviceThrottling> element in an application configuration file.

Aplica-se a