2010-09-30 48 views
70

Tôi đang gặp phải một thời gian chờ yêu cầu từ IIS khi tôi chạy một hoạt động 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.Thời gian chờ yêu cầu IIS trên hoạt động ASP.NET dài

Tuy nhiên, tôi nghĩ rằng IIS đã hết 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

Trả lời

123

Nếu bạn muốn mở rộng số lượng thời gian cho phép cho một kịch bản ASP.NET để thực hiện sau đó tăng giá trị Server.ScriptTimeout. 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 cấu hình trong tập tin web.config của bạn trong các yếu tố httpRuntime cấu hình:

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

enter image description here

Xin lưu ý theo MSDN documentation:

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

Nếu bạn đã làm điều này nhưng thấy rằng phiên của bạn hết hạn sau đó 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 cấu hình trong tập tin web.config của bạn trong t ông sessionState yếu tố cấu hình:

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

Nếu kịch bản của bạn đang tiến hành vài phút để thực hiện và có rất nhiều người dùng đồng thời sau đó xem xét việc thay đổi trang để một Asynchronous Page. Đ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ủ, hãy xem xét hoạt động chạy dài này làm ứng cử viên để thực hiện tác vụ theo lịch hoặc dịch vụ cửa sổ.

+0

FYI httpRuntime executionTimeout là trong vài giây và không có T hoa –

+6

Nó cũng quan trọng cần lưu ý rằng chế độ debug được thiết lập là false để cho giá trị timeout này sẽ được sử dụng:

+0

@JesseRoper nếu bạn có thể chỉ cho tôi tài liệu về điều đó thì tôi rất sẵn lòng đưa câu trả lời vào câu trả lời hoặc bạn có thể chỉnh sửa câu trả lời của mình trực tiếp. Ta. – Kev

17

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 ứng dụng WebForms, tôi đã sử dụng tùy chọn mã. Nhưng để cho phép sửa chữa 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 thẻ <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ọ.

Dưới đây 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 ofcourse giá trị khác so với ví dụ '4 giờ' của tôi, nhưng DO lưu ý rằng phiên timeOut là trong vài phút, trong khi yêu cầu executionTimeout là trong vài giây!

Và - kể từ đó là năm 2015 đã - cho một không nhanh chóng, bạn nên sử dụng .Net 4.5 của 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 trong 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> 
+0

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

-2

Di ~ nhân vật ở vị trí nên

path="~/Admin/SomePage.aspx" 

trở thành

path="Admin/SomePage.aspx" 
2

Tôi gửi bài này ở đây, bởi vì tôi đã bỏ ra như 3 và 4 giờ vào 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à 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, thêm thuộc tính requestTimeout 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.

tham khảo: https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module#configuring-the-asp-net-core-module

Các vấn đề liên quan