2011-09-09 26 views
8

Chúng tôi có cổng web có trang cho phép người dùng tải lên tối đa 5 tệp cùng một lúc. Trang chỉ có 5 điều khiển ASP.NET FileUpload tiêu chuẩn.Tải lên tệp ASP.NET ngừng tất cả các yêu cầu khác trên trang web

Vấn đề là, chúng tôi thấy rằng khi người dùng tải lên tệp, tất cả các hoạt động khác trên trang web sẽ bị tạm dừng. Trong 1-2 phút tải lên, chúng tôi thấy các yêu cầu bắt đầu xếp hàng và yêu cầu thông lượng giảm xuống 0. Ngay sau khi các tệp kết thúc tải lên, mọi thứ sẽ tiếp tục. (Chúng tôi đang sử dụng Relic mới để cho chúng tôi biết điều gì đang diễn ra)

Chúng tôi không xử lý tính năng thường được sử dụng và các tệp đang được tải lên không lớn. Tuy nhiên, chúng tôi đã nhìn thấy việc tải lên của 4 tập tin ở khoảng 70kb mỗi nguyên nhân này.

Một số điều tra đã dẫn tôi đến this blog post. Thật không may, các sản phẩm họ xảy ra được bán đòi hỏi Server 2008 và IIS7 và khách hàng có 2003 và IIS6. Ngoài ra, nó chỉ không có vẻ là 4 tải lên nhỏ nên có ảnh hưởng này.

Vì vậy, có ai khác gặp phải tình huống này hoặc biết điều gì đó có thể đã được thực hiện sai để gây ra vấn đề này trên quy mô nhỏ như vậy không? Có lẽ có hồ bơi ứng dụng không chính xác hoặc cài đặt web.config chúng ta nên xem xét điều đó sẽ điều chỉnh thông lượng?

+0

Có phải nó chỉ chặn trên cùng một PC và trình duyệt không? Trang web vẫn phản hồi trong thời gian đó trên các máy tính khác hoặc các trình duyệt khác trên cùng một máy tính? Nói cách khác, bạn có bị giới hạn kết nối trình duyệt cho mỗi máy chủ không? –

+1

Bất kỳ cơ hội nào bạn đang tối đa chủ đề của App Pool? – joelmdev

+0

Mufasa - Nó chặn tất cả các máy tính và trình duyệt khác đang kết nối với trang web, không chỉ một trang duy nhất. jm2 - Có lẽ. Có cách nào tốt để tìm hiểu? – Ryan

Trả lời

1

Hãy thử sử dụng các đại biểu để tải lên không đồng bộ. Nó sẽ giúp.

0

Tại sao bạn không thử đặt các điều khiển tải lên trong bảng điều khiển cập nhật? Tôi nghĩ rằng sẽ xử lý riêng yêu cầu tải lên. Hãy cho tôi biết nếu công trình này hoạt động.

0

Có khả năng khi bạn nói tất cả các hoạt động khác trên trang web tạm dừng, nó chỉ xuất hiện trên các khách hàng đang thực hiện việc tải lên (EDIT: Tôi thấy rằng bạn đã nêu khác trong nhận xét) và nếu bạn không cần ghi dữ liệu lên Phiên trong khi tải lên, giải pháp sẽ dễ dàng: thay đổi trang/xử lý/WebMethod chấp nhận tải lên để nó không thể ghi vào Phiên, như sau.

  • Đối với một trang, thêm EnableSessionState="false" hay EnableSessionState="ReadOnly" để chỉ thị @ Page.
  • Để xử lý chung, hãy xóa IRequiresSessionState khỏi tuyên bố lớp học hoặc thay thế bằng IReadOnlySessionState.
  • Đối với một WebMethod, sử dụng EnableSession property of the WebMethod attribute: [System.Web.Services.WebMethod(EnableSession=false)]
0

nếu bạn sử dụng asp kiểm soát máy chủ FileUpload thêm mã này vào web.config

<httpRuntime 
executionTimeout="110" 
maxRequestLength="4096" 
requestLengthDiskThreshold="80" 
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4" 
appRequestQueueLimit="5000" 
enableKernelOutputCache="true" 
enableVersionHeader="true" 
requireRootedSaveAsPath="true" 
enable="true" 
shutdownTimeout="90" 
delayNotificationTimeout="5" 
waitChangeNotification="0" 
maxWaitChangeNotification="0" 
enableHeaderChecking="true" 
sendCacheControlHeader="true" 
apartmentThreading="false" />` 

chỉ cần thay đổi executionTimeout="110" maxRequestLength="4096"

+1

Web.config hiện tại có ''. Điều này có đạt được kết quả tương tự với những gì bạn đang đề xuất không? – Ryan

0
  1. http://www.uploadify.com/
    • cho phép bạn tải lên một hoặc nhiều tệp. Mỗi tập tin sẽ được gửi tới ->

-> 2. Web generic handler - Ở đây bạn có thể kiểm tra kích thước, mở rộng, nơi lưu trữ vv ...

  1. Sau khi tải lên xong, hãy trả lời một số tác vụ msg/do.

Loại cấu trúc này không có gì với tốc độ trang web của bạn ... giống như khi tải lên các tệp đó trên trang khác. Ngoài ra, hãy nghĩ rằng, nhiều tệp được tải lên từng cái một.

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