ServiceThrottlingBehavior.MaxConcurrentSessions Proprietà

Definizione

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.

Si applica a