Bagikan melalui


Menggunakan ServiceThrottlingBehavior untuk Mengontrol Performa Layanan WCF

Kelas ServiceThrottlingBehavior ini memaparkan properti yang dapat Anda gunakan untuk membatasi berapa banyak instans atau sesi yang dibuat di tingkat aplikasi. Dengan menggunakan perilaku ini, Anda dapat menyempurnakan performa aplikasi Windows Communication Foundation (WCF) Anda.

Mengontrol Instans Layanan dan Panggilan Bersamaan

Gunakan properti MaxConcurrentCalls untuk menentukan jumlah maksimum pesan yang aktif diproses di seluruh kelas ServiceHost, dan properti MaxConcurrentInstances untuk menentukan jumlah maksimum objek InstanceContext dalam layanan.

Karena menentukan pengaturan untuk properti ini biasanya terjadi setelah pengalaman dunia nyata menjalankan aplikasi terhadap beban, pengaturan untuk properti ServiceThrottlingBehaviorbiasanya ditentukan dalam file konfigurasi aplikasi menggunakan <elemen serviceThrottling>.

Contoh kode berikut menunjukkan penggunaan ServiceThrottlingBehavior kelas dari file konfigurasi aplikasi yang mengatur properti MaxConcurrentSessions, MaxConcurrentCalls, dan MaxConcurrentInstances ke 1 sebagai contoh sepele. Pengalaman dunia nyata menentukan pengaturan optimal untuk aplikasi tertentu.

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

Perilaku run-time yang tepat tergantung pada nilai propert ConcurrencyMode dan InstanceContextMode, yang mengontrol berapa banyak pesan yang dapat dijalankan di dalam operasi sekaligus dan masa pakai layanan InstanceContext masing-masing relatif terhadap sesi saluran masuk.

Untuk detailnya, lihat MaxConcurrentCalls dan MaxConcurrentInstances.

Lihat juga