2011-11-14 30 views
8

Tôi gặp lỗi bí ẩn khi tệp lớn hơn 4MB tạo ra lỗi ngẫu nhiên. Sau đó tôi nhận ra rằng nó đã được gây ra do http maxrequestlength . Hình ảnh không thể lớn hơn 4MB khi được tải lên theo mặc định.ERR_CONNECTION_RESET: Kết nối đã được đặt lại khi tải lên một tệp lớn

Tôi biết rằng điều này có thể thay đổi từ tệp web.config.

Khi tôi cố gắng phục vụ lỗi này, bằng cách hiển thị một trang khác, một lỗi khác đã bắt đầu xuất hiện. Khi gỡ lỗi, chương trình sẽ vào ngay application_error.

Khi thực hiện Server.GetLastError() ngoại lệ được tạo ra:

[System.Web.HttpUnhandledException] { "Ngoại lệ của loại 'System.Web.HttpUnhandledException' là ném"} System.Web.HttpUnhandledException

dấu vết ngăn xếp: tại System.Web.UI.Page.HandleError (Ngoại lệ e) tại System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) tại System.Web.UI.Page.Process Yêu cầu (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) tại System.Web.UI.Page.ProcessRequest() tại System.Web.UI.Page.ProcessRequestWithNoAssert (HttpContext ngữ cảnh) tại System.Web.UI.Page.ProcessRequest (HttpContext ngữ cảnh) tại ASP.businessprofile_aspx.ProcessRequest (ngữ cảnh HttpContext) trong c: \ Users \ Mattew \ AppData \ Local \ Temp \ Temporary ASP.NET Tệp \ root \ 4ea30077 \ 8f66786f \ App_Web_h5fmhavk.4.cs: dòng 0 tại System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() tại System.Web.HttpApplication.ExecuteStep (Bước IExecutionStep, Boolean & hoàn thànhSynchronously)

Nếu tôi thử bất kỳ mã nào bên trong phương thức application_error, ví dụ: chuyển hướng, vẫn là trang lỗi: Lỗi 101 (net :: ERR_CONNECTION_RESET): Kết nối đã được đặt lại. được hiển thị.

Câu hỏi

  1. nên lỗi này sẽ bị xử lý như thế nào? Nó có thể được xử lý trước khi tay? Vì vậy, lỗi này không được hiển thị? (Tôi đã thử sử dụng jquery để có kích thước tệp trước và kiểm tra nó nhưng tôi thấy nó quá phức tạp

  2. Nếu Câu hỏi 1 không 'trả lời', có cách nào để chặn lỗi này và hiển thị lỗi thân thiện không?

+1

Trông giống như một giới hạn IIS. – SLaks

+0

Điều đó có nghĩa là gì? nó là một vấn đề từ mã của tôi hoặc từ IIS? Tôi không nghĩ rằng tôi thậm chí sử dụng IIS, kể từ khi tôi chỉ cần nhấn chạy trên Visual Studio và một máy chủ tạm thời được bắt đầu! – test

+1

Bạn có nghĩa là bạn đang sử dụng Cassini. Tôi không chắc. Ngoại lệ bên trong là gì? – SLaks

Trả lời

11

Hãy thử điều này.

Dưới web hệ thống trong web.config

thêm dòng này ..

<system.web> 
<httpRuntime executionTimeout="999" maxRequestLength="2097151"/> 

Sau đó, bạn cần phải kiểm tra kích thước tập tin

if (AsyncFileUpload1.HasFile) 
     { 
      string FileName = Path.GetFileName(AsyncFileUpload1.PostedFile.FileName); 
      string Extension = Path.GetExtension(AsyncFileUpload1.PostedFile.FileName); 
      string FolderPath = ConfigurationManager.AppSettings["FolderPath"]; 
      string FilePath = Server.MapPath("~/xl/" + FileName); 
      double filesize = (double)AsyncFileUpload1.FileBytes.Length; 
      if (filesize < 106496) 
      { 
       //do something 
      } 
      else 
      { 
       Response.Write("File size must be less than 2MB."); 
      } 

Nếu bạn tìm thấy nó hữu ích, hãy đánh dấu nó như là câu trả lời của bạn khác cho tôi biết ..

+0

cảm ơn bạn đã đề xuất của bạn. Tôi sẽ cố gắng và sử dụng nó ngay bây giờ. sau khi gỡ lỗi hơn, tôi có thể thêm các thông tin sau: - \t \t Response.Headers \t 'Response.Headers' ném một ngoại lệ của loại 'System.PlatformNotSupportedException' \t System.Collections.Specialized.NameValueCollection {System.PlatformNotSupportedException } khi tôi mở nó, thông báo liên quan tôi tìm thấy là "Thao tác này yêu cầu chế độ đường ống tích hợp IIS." – test

+0

Tôi đã thử đề xuất của bạn, nó hoạt động vì maxRequestlength là rất lớn. Tôi đã nghiên cứu điều này. nhưng vẫn còn, nếu người dùng đặt một cái gì đó lớn hơn maxRequestLength, điều gì sẽ xảy ra (mặc dù điều này là rất hiếm xảy ra), nó vẫn giống như 'gian lận' từ phía nhà phát triển. không có cách nào để làm điều này? PS Tôi không sử dụng tải lên tệp không đồng bộ, tôi có nên sử dụng tệp đó thay thế không? – test

+0

Với cách tiếp cận được đề xuất bởi @AnandMohanAwasthi thực sự là một sự lãng phí tài nguyên. Bạn cho phép người dùng tải lên một tệp lớn và sau đó tại máy chủ bạn từ chối nó vì nó lớn hơn giới hạn dưới của bạn mà bạn có trong mã. Bản thân tôi đang tìm kiếm một giải pháp tốt hơn, nhưng mạnh mẽ cảm thấy giải pháp được đề xuất là một giải pháp sai. –

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