Pertanyaan IIS Request Timeout pada operasi ASP.NET panjang


Saya mengalami batas waktu permintaan dari IIS ketika saya menjalankan operasi yang lama. Di belakang layar aplikasi ASP.NET saya sedang memproses data, tetapi jumlah rekaman yang sedang diproses besar, dan dengan demikian operasi memakan waktu lama.

Namun, saya pikir kali IIS keluar dari sesi. Apakah ini masalah dengan sesi IIS atau ASP.NET?

Terima kasih sebelumnya


75
2017-09-30 09:06


asal


Jawaban:


Jika Anda ingin memperpanjang jumlah waktu yang diijinkan untuk skrip ASP.NET untuk dieksekusi maka tingkatkan Server.ScriptTimeout nilai. Standarnya adalah 90 detik untuk .NET 1.x dan 110 detik untuk .NET 2.0 dan yang lebih baru.

Sebagai contoh:

// Increase script timeout for current page to five minutes
Server.ScriptTimeout = 300;

Nilai ini juga dapat dikonfigurasi di Anda web.config file dalam httpRuntime elemen konfigurasi:

<!-- Increase script timeout to five minutes -->
<httpRuntime executionTimeout="300" 
  ... other configuration attributes ...
/>

enter image description here

Harap dicatat sesuai dengan Dokumentasi MSDN:

"Waktu habis ini hanya berlaku jika atribut debug dalam kompilasi   elemen adalah False. Oleh karena itu, jika atribut debug adalah True, Anda melakukannya   tidak perlu mengatur atribut ini ke nilai yang besar untuk menghindari   aplikasi shutdown saat Anda melakukan debugging. "

Jika Anda sudah melakukan ini tetapi menemukan bahwa sesi Anda berakhir maka tingkatkan ASP.NET HttpSessionState.Timeout nilai:

Sebagai contoh:

// Increase session timeout to thirty minutes
Session.Timeout = 30;

Nilai ini juga dapat dikonfigurasi di Anda web.config file dalam sessionState elemen konfigurasi:

<configuration>
  <system.web>
    <sessionState 
      mode="InProc"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

Jika skrip Anda mengambil beberapa menit untuk dijalankan dan ada banyak pengguna bersamaan kemudian pertimbangkan untuk mengubah halaman menjadi Halaman Asynchronous. Ini akan meningkatkan skalabilitas aplikasi Anda.

Alternatif lain, jika Anda memiliki akses administrator ke server, adalah mempertimbangkan operasi yang berjalan lama ini sebagai kandidat untuk diimplementasikan sebagai tugas terjadwal atau layanan windows.


130
2017-09-30 13:02



Jawaban yang bagus dan lengkap @Kev!

Karena saya hanya memproses lama di satu halaman admin dalam aplikasi WebForms saya menggunakan opsi kode. Tetapi untuk memungkinkan perbaikan cepat sementara pada produksi saya menggunakan versi konfigurasi dalam <location> tag di web.config. Dengan cara ini admin / halaman pemrosesan saya mendapat waktu yang cukup, sementara halaman untuk pengguna akhir dan seperti itu menyimpan kebiasaan lama mereka.

Di bawah ini saya memberikan konfigurasi untuk Anda, Karyawan Google membutuhkan perbaikan cepat yang sama. Anda harus tentu saja menggunakan nilai lain daripada contoh '4 jam' saya, tetapi MELAKUKAN perhatikan bahwa sesi timeOut dalam hitungan menit, sementara permintaan executionTimeout dalam hitungan detik!

Dan - karena sudah tahun 2015 - untuk NON-quickfix Anda harus menggunakan .Net 4.5's async / wait sekarang jika keadaan memungkinkan, alih-alih .NET 2.0's ASYNC page yang canggih saat KEV menjawab pada tahun 2010 :).

<configuration>
    ... 
    <compilation debug="false" ...>
    ... other stuff ..

    <location path="~/Admin/SomePage.aspx">
        <system.web>
            <sessionState timeout="240" />
            <httpRuntime executionTimeout="14400" />
        </system.web>
    </location>
    ...
</configuration>

19
2018-02-01 11:07



Saya posting ini di sini, karena saya telah menghabiskan waktu 3 dan 4 jam di atasnya, dan saya hanya menemukan jawaban seperti yang di atas, yang mengatakan lakukan tambahkan executionTime, tetapi tidak menyelesaikan masalah dalam kasus yang Anda gunakan ASP .NET Core. Untuk itu, ini akan berhasil:

Pada file web.config, tambahkan requestTimeout atribut di aspNetCore simpul.

<system.webServer>
  <aspNetCore requestTimeout="00:10:00" ... (other configs goes here) />
</system.webServer>

Dalam contoh ini, saya menetapkan nilai selama 10 menit.

Referensi: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module


3
2018-06-19 15:29



Menghapus ~ karakter di lokasi begitu

path="~/Admin/SomePage.aspx"

menjadi

path="Admin/SomePage.aspx"

-4
2017-10-28 20:08