ServiceThrottlingBehavior.MaxConcurrentSessions Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta un valore che specifica il numero massimo di sessioni accettate contemporaneamente da un oggetto ServiceHost.
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
Valore della proprietà
Il numero massimo di sessioni accettate da un host del servizio. Il valore predefinito è 100 volte il conteggio del processore.
Esempio
Nell'esempio di codice seguente viene illustrato come utilizzare 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>
Commenti
La proprietà MaxConcurrentSessions specifica il numero massimo di sessioni accettate da un oggetto ServiceHost. È importante comprendere che in questo caso le sessioni non significano solo canali che supportano sessioni affidabili: ad esempio, System.ServiceModel.NetNamedPipeBinding supporta le sessioni ma non include sessioni affidabili.
Ogni oggetto listener può avere una sessione del canale in sospeso che non viene conteggiato sul valore di MaxConcurrentSessions fino a quando WCF accetta la sessione del canale e inizia l'elaborazione dei messaggi. Questa proprietà è molto utile negli scenari che utilizzano le sessioni.
Quando questa proprietà viene impostata su un valore inferiore al numero di thread client, è possibile che le richieste di più client possano venire accodate nella stessa connessione del socket. Le richieste del client che non ha creato una sessione con il servizio verranno bloccate finché il servizio non chiude la propria sessione con gli altri client se il numero di sessioni aperte nel servizio ha raggiunto MaxConcurrentSessions
. Le richieste del client che non vengono soddisfatte scadono e il servizio chiude la sessione improvvisamente.
Per evitare questa situazione, eseguire i thread client da domini di applicazione diversi, in modo che i messaggi di richiesta confluiscano in connessioni socket diverse.
È anche possibile impostare i valori di questo attributo usando l'elemento <serviceThrottling> in un file di configurazione dell'applicazione.