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.