Använda ServiceThrottlingBehavior för att kontrollera WCF-tjänstens prestanda

Klassen ServiceThrottlingBehavior exponerar egenskaper som du kan använda för att begränsa hur många instanser eller sessioner som skapas på programnivå. Med det här beteendet kan du finjustera prestanda för ditt WCF-program (Windows Communication Foundation).

Kontrollera tjänstinstanser och samtidiga anrop

Använd egenskapen MaxConcurrentCalls för att ange det maximala antalet meddelanden som aktivt bearbetas i en ServiceHost klass och MaxConcurrentInstances egenskapen för att ange det maximala antalet InstanceContext objekt i tjänsten.

Eftersom fastställandet av inställningarna för dessa egenskaper vanligtvis sker efter verklig upplevelse av att köra programmet mot belastningar, anges vanligtvis inställningarna för ServiceThrottlingBehavior egenskaperna i en programkonfigurationsfil med hjälp av <serviceThrottling-elementet> .

I följande kodexempel visas användningen av ServiceThrottlingBehavior klassen från en programkonfigurationsfil som anger MaxConcurrentSessionsegenskaperna , MaxConcurrentCallsoch MaxConcurrentInstances till 1 som ett trivialt exempel. Verklig upplevelse avgör de optimala inställningarna för ett visst program.

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

Det exakta körningsbeteendet beror på värdena av egenskaperna ConcurrencyMode och InstanceContextMode, vilka styr hur många meddelanden som kan köras i en åtgärd samtidigt och tjänstens InstanceContext livslängd i förhållande till inkommande kanalsessioner.

Mer information finns i MaxConcurrentCalls, och MaxConcurrentInstances.

Se även