2011-11-14 20 views
8

Tuve un error misterioso cuando un archivo de más de 4 MB generó un error aleatorio. Más tarde me di cuenta de que fue causada por el http maxrequestlength . Una imagen no puede ser mayor a 4MB cuando se carga por defecto.ERR_CONNECTION_RESET: la conexión se restableció al cargar un archivo grande

Sé que esto puede cambiar desde el archivo web.config.

Cuando traté de atender este error, al mostrar otra página, un error diferente comenzó a aparecer. Al depurar, el programa ingresa application_error inmediatamente.

Al ejecutar Server.GetLastError() excepción generada:

[System.Web.HttpUnhandledException] { "excepción de tipo 'System.Web.HttpUnhandledException' era tirado"} System.Web.HttpUnhandledException

el seguimiento de la pila: en System.Web.UI.Page.HandleError (Excepción e) en System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) en System.Web.UI.Page.Process Solicitud (booleano includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) en System.Web.UI.Page.ProcessRequest() en System.Web.UI.Page.ProcessRequestWithNoAssert (HttpContext contexto) en System.Web.UI.Page.ProcessRequest (HttpContext contexto) en ASP.businessprofile_aspx.ProcessRequest (contexto HttpContext) en c: \ Users \ Mattew \ AppData \ Local \ Temp \ Temporal ASP.NET Archivos \ root \ 4ea30077 \ 8f66786f \ App_Web_h5fmhavk.4.cs: línea 0 en System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() en System.Web.HttpApplication.ExecuteStep (paso IExecutionStep, Boolean & completedSynchronously)

Si pruebo cualquier código dentro del método application_error, p. redirigiendo, sigue siendo la página de error: Error 101 (net :: ERR_CONNECTION_RESET): se restableció la conexión. se muestra.

Preguntas

  1. cómo se sostienen este error? ¿Se puede manejar de antemano? Entonces este error no se muestra? (Intenté usar jquery para obtener el tamaño del archivo antes y verificarlo pero me parece demasiado complejo

  2. Si la pregunta 1 no es 'respondable', ¿hay alguna manera de interceptar este error y mostrar un error amistoso?

+1

que se parece a un límite de IIS. – SLaks

+0

¿Qué significa eso exactamente por favor? ¿es un problema de mi código o del IIS? ¡No creo que siquiera use IIS, ya que acabo de ejecutar Ejecutar en Visual Studio y se inicia un servidor temporal! – test

+1

Quieres decir que estás usando Cassini. No estoy seguro. ¿Cuál es la excepción interna? – SLaks

Respuesta

11

Trate de hacer esto.

Bajo web del sistema en web.config

añadir esta línea ..

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

Luego hay que comprobar el tamaño del archivo

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."); 
      } 

Si le resulta útil, por favor marca como su respuesta otra cosa que me haga saber ..

+0

gracias por su sugerencia. Voy a tratar de usarlo ahora. después de más de depuración, puedo añadir la siguiente información: - \t \t response.headers \t 'response.headers' produjo una excepción de tipo 'System.PlatformNotSupportedException' \t System.Collections.Specialized.NameValueCollection {System.PlatformNotSupportedException } cuando lo abro, el mensaje relevante que encontré fue "Esta operación requiere el modo de canalización integrada de IIS". – test

+0

He intentado su sugerencia, funciona, ya que maxRequestlength es muy grande. Investigué esto. pero aún así, si un usuario coloca algo más grande que maxRequestLength, lo que sucederá (aunque esto es muy raro que ocurra), sigue siendo como 'hacer trampa' desde el lado del desarrollador. ¿No hay una manera más clara de hacer esto? PD No uso carga de archivo asíncrono, ¿debería usar eso en su lugar? – test

+0

Con el enfoque sugerido por @AnandMohanAwasthi, en realidad es un desperdicio de recursos. Dejas que el usuario cargue un archivo enorme y luego en el servidor lo rechazas porque es más grande que tu límite inferior que tienes en el código. Yo mismo estoy buscando una solución mejor, pero creo firmemente que la solución sugerida es una solución incorrecta. –

Cuestiones relacionadas