2012-03-30 23 views
6

Trang khách hàng sử dụng javascript để đăng dữ liệu biểu mẫu nhiều (tệp) lên trang ASP.NET của tôi (trình xử lý ashx).Xử lý các POST HTTP đồng thời lớn trong ứng dụng ASP.NET

Người dùng chọn một số tệp và bắt đầu tải lên đồng thời. Khi các tập tin giống như 150MB +, điều này tạo ra một số xử lý POST đồng thời của phía máy chủ ASP.NET.

Tôi có kiểm soát phiên được triển khai, cùng với chức năng captcha để biết chính xác nếu nó không phải là bot tràn ngập máy chủ của tôi.

Nhưng vấn đề là bắt đầu tải lên ban đầu.

Mỗi lần người xử lý xử lý POST, nó sẽ kiểm tra ID phiên (phiên tùy chỉnh của tôi, một phiên trên mỗi người dùng) và thêm kích thước Request.ContentLength vào tổng kích thước tệp POST ed mỗi phiên. Dữ liệu này được lưu vào một XML.

Nhưng vì một số bài viết ban đầu xuất hiện đồng thời, một nhà văn XML ghi tổng số byte "cuộn" và báo cáo 0 byte mỗi phiên cho tất cả POST s ban đầu, vì chúng xuất hiện cùng lúc.

Tôi đã triển khai lock trên đối tượng persister (viết XML), nhưng bây giờ cho đến khi một POST hoàn toàn được xử lý, những người khác không thể tiếp tục.

Ngoài ra mặc dù tôi không làm bất cứ điều gì với yêu cầu đến "sau khi giới hạn tải lên", họ vẫn mất thời gian để tải dữ liệu lên máy chủ.

Vì vậy, câu hỏi của tôi là:

mô hình đúng để xử lý một số đồng thời POST cập là gì?

Có cách nào để ngay lập tức thả POST ngay sau khi yêu cầu được lọc trong mã xử lý ASP.NET và lưu khách hàng một nỗ lực tải dữ liệu lên IIS?

CẬP NHẬT: Khi lock chỉ nhập trên văn bản XML/tính toán thời lượng phiên tối đa, tôi vẫn có đồng thời, điều này tốt. Bây giờ tôi chỉ cần tìm hiểu làm thế nào để thả phiên ngay lập tức từ mã xử lý ashx.

+0

Có phải tất cả các yêu cầu http văn bản cho cùng một tập tin? Âm thanh như thiết kế xấu. Bạn có thể cần phải suy nghĩ về việc sử dụng một số dịch vụ xếp hàng tin nhắn để chăm sóc này. Nó cũng được khuyến khích để lưu dữ liệu vào cơ sở dữ liệu. – deostroll

+0

Trường hợp này đặc biệt là khi trong cùng một phiên (có nghĩa là trong cùng một thư mục) hai tập tin cùng tên đang được lưu vào. Đối với cơ sở dữ liệu - đó là một ý tưởng tuyệt vời, nhưng HttpPostedFile có một phương thức SaveAs trong một đường dẫn trên một hệ thống tệp. Tôi đã không nhìn vào cách serialize gửi tập tin để DB với ASP.NET. –

Trả lời

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