Utilisation de ServiceThrottlingBehavior pour contrôler les performances du service WCF

La ServiceThrottlingBehavior classe expose les propriétés que vous pouvez utiliser pour limiter le nombre d’instances ou de sessions créées au niveau de l’application. À l’aide de ce comportement, vous pouvez affiner les performances de votre application Windows Communication Foundation (WCF).

Contrôle des instances de service et des appels simultanés

Utilisez la MaxConcurrentCalls propriété pour spécifier le nombre maximal de messages en cours de traitement actif sur une ServiceHost classe et la MaxConcurrentInstances propriété pour spécifier le nombre maximal d’objets InstanceContext dans le service.

Étant donné que la détermination des paramètres de ces propriétés a généralement lieu après l’exécution réelle de l’application sur des charges, les paramètres des ServiceThrottlingBehavior propriétés sont généralement spécifiés dans un fichier de configuration d’application à l’aide de l’élément <serviceThrottling> .

L’exemple de code suivant montre l’utilisation de la ServiceThrottlingBehavior classe à partir d’un fichier de configuration d’application qui définit le MaxConcurrentSessions, MaxConcurrentCallset MaxConcurrentInstances les propriétés sur 1 comme exemple trivial. L’expérience réelle détermine les paramètres optimaux pour n’importe quelle 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>

Le comportement exact du runtime dépend des valeurs des propriétés ConcurrencyMode et InstanceContextMode, qui contrôlent le nombre de messages InstanceContextMode pouvant s’exécuter à l’intérieur d’une opération à la fois et les durées de vie du service par rapport aux sessions de canal entrantes, respectivement.

Pour plus d’informations, voir MaxConcurrentCallset MaxConcurrentInstances.

Voir aussi