Condividi tramite


Uso di ServiceThrottlingBehavior per controllare le prestazioni dei servizi WCF

La classe ServiceThrottlingBehavior espone proprietà che possono essere usate per limitare il numero di istanze o sessioni create al livello dell'applicazione. Usando questo comportamento, è possibile ottimizzare le prestazioni dell'applicazione Windows Communication Foundation (WCF).

Controllo delle istanze di servizio e delle chiamate contemporanee

Usare la proprietà MaxConcurrentCalls per specificare il numero massimo di messaggi elaborati attivamente in una classe ServiceHost e la proprietà MaxConcurrentInstances per specificare il numero massimo di oggetti InstanceContext nel servizio.

Poiché la determinazione delle impostazioni per queste proprietà avviene in genere dopo l'esperienza in scenari reali eseguendo l'applicazione con i carichi, le impostazioni per le proprietà ServiceThrottlingBehavior vengono in genere specificate in un file di configurazione dell'applicazione usando l'elemento <serviceThrottling>.

L'esempio di codice seguente mostra come usare la classe ServiceThrottlingBehavior da un file di configurazione dell'applicazione che imposta le proprietà MaxConcurrentSessions, MaxConcurrentCalls e MaxConcurrentInstances su 1 a scopo di esempio. L'esperienza in scenari reali determina le impostazioni ottimali per qualsiasi applicazione specifica.

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

L'esatto comportamento in fase di esecuzione dipende dai valori delle proprietà ConcurrencyMode e InstanceContextMode che controllano rispettivamente il numero dei messaggi che possono essere eseguiti simultaneamente in un'operazione e la durata della classe InstanceContext del servizio relativa alle sessioni del canale in ingresso.

Per informazioni dettagliate, vedere MaxConcurrentCalls e MaxConcurrentInstances.

Vedi anche