ServiceThrottlingBehavior.MaxConcurrentSessions Eigenschaft

Definition

Ruft einen Wert ab, der die maximale Anzahl an Sitzungen angibt, die ein ServiceHost-Objekt gleichzeitig akzeptiert.

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

Eigenschaftswert

Die maximale Anzahl an Sitzungen, die ein Diensthost akzeptiert. Der Standardwert ist das 100-fache der Prozessoranzahl.

Beispiele

Im folgenden Codebeispiel wird die Verwendung des ServiceThrottlingBehavior aus einer Anwendungskonfigurationsdatei gezeigt, wobei die MaxConcurrentSessions, MaxConcurrentCalls-Eigenschaft und die MaxConcurrentInstances-Eigenschaft als Beispiel auf 1 festgelegt werden. Die optimalen Einstellungen für eine bestimmte Anwendung finden Sie durch praktische Erfahrung heraus.

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

Hinweise

Die MaxConcurrentSessions-Eigenschaft gibt die maximale Anzahl der Sitzungen an, die ein ServiceHost-Objekt akzeptieren kann. Beachten Sie, dass mit Sitzungen in diesem Fall nicht nur Kanäle gemeint sind, die zuverlässige Sitzungen unterstützen (so unterstützt z. B. System.ServiceModel.NetNamedPipeBinding Sitzungen, enthält jedoch keine zuverlässigen Sitzungen).

Jedes Listenerobjekt kann eine ausstehende Kanalsitzung aufweisen, die nicht mit dem Wert von MaxConcurrentSessions gezählt wird, bis WCF die Kanalsitzung akzeptiert und mit der Verarbeitung von Nachrichten beginnt. Diese Eigenschaft ist höchst nützlich in Szenarien, die Sitzungen nutzen.

Wenn diese Eigenschaft auf einen Wert festgelegt wird, der unter der Anzahl der Clientthreads liegt, werden die Anforderungen von mehreren Clients möglicherweise in derselben Socketverbindung in eine Warteschlange gestellt. Die Anforderungen von dem Client, der keine Sitzung mit dem Dienst erstellt hat, wird so lange blockiert, bis der Dienst seine Sitzung mit den anderen Clients geschlossen hat, wenn die Anzahl der geöffneten Sitzungen in dem Dienst MaxConcurrentSessions erreicht hat. Bei Clientanforderungen, die nicht behandelt werden, tritt eine Zeitüberschreitung auf, und der Dienst schließt sofort die Sitzung.

Um diese Situation zu vermeiden, sollten Sie die Clientthreads über verschiedene Anwendungsdomänen ausführen, sodass die Anforderungsnachrichten zu verschiedenen Socketverbindungen geleitet werden.

Sie können die Werte dieses Attributs auch mithilfe des <serviceThrottling-Elements> in einer Anwendungskonfigurationsdatei festlegen.

Gilt für: