Partage via


ServiceThrottlingBehavior.MaxConcurrentSessions Propriété

Définition

Obtient ou définit une valeur qui spécifie le nombre maximal de sessions qu'un objet ServiceHost peut accepter à la fois.

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

Valeur de propriété

Int32

Nombre maximal de sessions qu'un hôte de service accepte. La valeur par défaut est 100 fois le nombre de processeurs.

Exemples

L'exemple de code suivant illustre l'utilisation de ServiceThrottlingBehavior à partir d'un fichier de configuration de l'application qui affecte aux propriétés MaxConcurrentSessions, MaxConcurrentCalls et MaxConcurrentInstances la valeur 1 en guise d'exemple. L'expérience détermine les paramètres optimaux pour toute application particulière.

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

Remarques

La propriété MaxConcurrentSessions spécifie le nombre maximal de sessions qu'un objet ServiceHost peut accepter. Il est important de comprendre que, dans ce cas, les sessions ne signifient pas uniquement les canaux qui prennent en charge des sessions fiables (par exemple, System.ServiceModel.NetNamedPipeBinding prend en charge des sessions mais n'inclut pas de sessions fiables).

Chaque objet écouteur peut avoir une session de canal en attente qui ne compte pas par rapport à la valeur jusqu’à MaxConcurrentSessions ce que WCF accepte la session de canal et commence à traiter les messages sur celui-ci. Cette propriété est surtout utile dans les scénarios qui utilisent des sessions.

Lorsque cette propriété est affectée à une valeur inférieure au nombre de threads clients, les demandes de plusieurs clients peuvent être mises en file d'attente dans la même connexion de socket. Les demandes du client qui n'a pas créé de session avec le service sont bloquées jusqu'à ce que le service ferme sa session avec les autres clients si le nombre de sessions ouvertes sur le service a atteint la valeur MaxConcurrentSessions. Les demandes du client qui ne sont pas servies arrivent à expiration et le service ferme subitement la session.

Pour éviter cette situation, exécutez les threads clients à partir de différents domaines d'application afin que les messages de demande passent par des connexions de socket différentes.

Vous pouvez également définir les valeurs de cet attribut à l’aide de l’élément <serviceThrottling> dans un fichier de configuration d’application.

S’applique à