Freigeben über


Verwenden von ServiceThrottlingBehavior zur Steuerung der Leistung des WCF-Diensts

Mit der ServiceThrottlingBehavior-Klasse werden Eigenschaften verfügbar gemacht, mit denen die Anzahl der Instanzen oder Sitzungen begrenzt wird, die auf Anwendungsebene erstellt werden dürfen. Mithilfe dieses Verhaltens können Sie die Leistung Ihrer WCF-Anwendung (Windows Communication Foundation) optimieren.

Steuern von Dienstinstanzen und gleichzeitigen Aufrufen

Verwenden Sie die MaxConcurrentCalls-Eigenschaft, um die maximale Anzahl der Nachrichten anzugeben, die aktiv in einer ServiceHost-Klasse verarbeitet werden und die MaxConcurrentInstances-Eigenschaft, um die maximale Anzahl der InstanceContext-Objekte im Dienst anzugeben.

Da die Festlegung der Einstellungen für diese Eigenschaften in der Regel nach tatsächlicher Ausführung der Anwendung mit Lasten stattfindet, werden die Einstellungen für die ServiceThrottlingBehavior-Eigenschaften normalerweise mithilfe des <serviceThrottling>-Elements in einer Anwendungskonfigurationsdatei angegeben.

Im folgenden Codebeispiel wird die Verwendung der ServiceThrottlingBehavior-Klasse von einer Anwendungskonfigurationsdatei gezeigt, die die MaxConcurrentSessions, MaxConcurrentCalls-Eigenschaft und die MaxConcurrentInstances-Eigenschaft in einem einfachen Beispiel auf 1 festlegt. 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>

Das genaue Laufzeitverhalten hängt von den Werten der ConcurrencyMode-Eigenschaft und der InstanceContextMode-Eigenschaft ab, mit denen die Anzahl der gleichzeitig in einem Vorgang ausführbaren Nachrichten und die Lebensdauer des Dienst-InstanceContext relativ zu den eingehenden Kanalsitzungen bestimmt wird.

Ausführliche Informationen finden Sie unter MaxConcurrentCalls und MaxConcurrentInstances.

Siehe auch