Câu hỏi Thời gian chờ yêu cầu IIS trên hoạt động ASP.NET dài


Tôi đang gặp một thời gian chờ yêu cầu từ IIS khi tôi chạy một hoạt động lâu dài. Đằng sau ứng dụng ASP.NET của tôi đang xử lý dữ liệu, nhưng số lượng hồ sơ được xử lý lớn, và do đó hoạt động mất nhiều thời gian.

Tuy nhiên, tôi nghĩ rằng IIS lần trong phiên. Đây có phải là một vấn đề với IIS hoặc ASP.NET phiên?

Cảm ơn trước


76
2017-09-30 09:06


gốc




Các câu trả lời:


Nếu bạn muốn gia hạn khoảng thời gian cho phép cho một tập lệnh ASP.NET để thực thi thì hãy tăng Server.ScriptTimeout giá trị. Giá trị mặc định là 90 giây đối với .NET 1.x và 110 giây đối với .NET 2.0 trở lên.

Ví dụ:

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

Giá trị này cũng có thể được định cấu hình trong web.config tập tin trong httpRuntime yếu tố cấu hình:

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

enter image description here

Xin lưu ý theo các Tài liệu MSDN:

"Thời gian chờ này chỉ áp dụng nếu thuộc tính gỡ lỗi trong trình biên dịch   phần tử là Sai. Do đó, nếu thuộc tính gỡ lỗi là True, bạn thực hiện   không phải đặt thuộc tính này thành giá trị lớn để tránh   tắt ứng dụng trong khi bạn đang gỡ lỗi. "

Nếu bạn đã làm điều này nhưng nhận thấy rằng phiên của bạn hết hạn thì hãy tăng ASP.NET HttpSessionState.Timeout giá trị:

Ví dụ:

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

Giá trị này cũng có thể được định cấu hình trong web.config tập tin trong sessionState yếu tố cấu hình:

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

Nếu tập lệnh của bạn mất vài phút để thực thi và có nhiều người dùng đồng thời thì hãy xem xét việc thay đổi trang thành Trang không đồng bộ. Điều này sẽ làm tăng khả năng mở rộng của ứng dụng của bạn.

Cách khác, nếu bạn có quyền truy cập quản trị viên vào máy chủ, là xem xét hoạt động chạy dài này như một ứng cử viên để thực hiện nhiệm vụ theo lịch hoặc một dịch vụ windows.


131
2017-09-30 13:02



FYI httpRuntime executionTimeout chỉ mất vài giây và không có chữ T - Andrew Rimmer
Điều quan trọng cần lưu ý là chế độ gỡ lỗi được đặt thành false để giá trị thời gian chờ này được sử dụng: <system.web> <compilation debug = "false" targetFramework = "4.0" /> </ system.web> - Jesse Roper
@ JesseRoper nếu bạn có thể chỉ cho tôi tài liệu về điều đó thì tôi sẽ rất vui khi đưa vào câu trả lời hoặc bạn có thể chỉnh sửa câu trả lời của tôi trực tiếp. Ta. - Kev
Giá trị executeTimeout mặc định là 110 giây. - frattaro


Câu trả lời tuyệt vời và đầy đủ @Kev!

Vì tôi đã xử lý lâu dài chỉ trong một trang quản trị trong một ứng dụng WebForms, tôi đã sử dụng tùy chọn mã. Nhưng để cho phép khắc phục nhanh chóng tạm thời về sản xuất, tôi đã sử dụng phiên bản cấu hình trong <location> trong web.config. Bằng cách này, trang quản trị / xử lý của tôi có đủ thời gian, trong khi các trang cho người dùng cuối và như vậy vẫn giữ nguyên hành vi cũ của họ.

Bên dưới, tôi đã cung cấp cấu hình cho bạn để nhân viên Google cần sửa nhanh chóng. Bạn nên sử dụng các giá trị khác so với ví dụ '4 giờ' của tôi, nhưng LÀM lưu ý rằng phiên timeOut chỉ trong vài phút, trong khi yêu cầu executionTimeout chỉ trong vài giây!

Và - kể từ khi nó đã 2015 - cho một Quickfix bạn nên sử dụng .Net 4.5's async / await bây giờ, nếu có thể, thay vì trang ASYNC của .NET 2.0 là trạng thái của nghệ thuật khi KEV trả lời vào năm 2010 :).

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

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

20
2018-02-01 11:07



Tôi đã bao gồm đoạn mã "vị trí" trong web.config của mình nhưng nó không hoạt động. Tôi đang sử dụng "executionTimeout" chỉ, tôi không cần "sessionState". Tôi có phải định cấu hình cái gì khác không. Tôi đang sử dụng NET 4.0. Nếu tôi sử dụng "httpRuntime" trực tiếp trong "system.web", nó sẽ áp dụng thời gian chính xác trong tất cả các trang. - Oliver


Tôi đăng bài này ở đây, bởi vì tôi đã dành 3 và 4 giờ trên đó, và tôi đã chỉ tìm thấy câu trả lời giống như những câu hỏi trên, điều đó có nghĩa là hãy thêm executionTime, nhưng nó không giải quyết được vấn đề trong trường hợp bạn đang sử dụng ASP .NET Core. Đối với nó, điều này sẽ làm việc:

Tại tệp web.config, hãy thêm requestTimeout thuộc tính tại aspNetCore nút.

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

Trong ví dụ này, tôi sẽ đặt giá trị trong 10 phút.

Tài liệu tham khảo: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module


3
2018-06-19 15:29





Tẩy ~ ký tự trong vị trí vì thế

path="~/Admin/SomePage.aspx"

trở thành

path="Admin/SomePage.aspx"

-4
2017-10-28 20:08