2012-02-07 17 views
7

Estoy capturando parte de la información sobre usuarios que visitan una sección particular de mi sitio web y me aparece un error extraño. Tengo una sección de código que hace lo siguiente.HttpRequestBase.UserHostAddress throwing error

string userIp = request.UserHostAddress; 

La variable de solicitud es una HttpRequestBase. A veces, esto funciona bien y obtengo el IP; otras veces arroja un error que no estoy seguro de cómo protegerme. Esto es de mi registro de errores.

"Valor no está dentro del rango esperado. En System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode, IntPtr errorInfo) en System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal (String name)"

Parece que la primera vez que voy a una página funciona bien, el error se produce si realizo una actualización, o voy rápidamente a otra página que captura la misma variable.

+0

Vea si esto lo ayuda: http://stackoverflow.com/questions/650357/httprequest-servervariables-throws-argumentexception-in-wcf-with-iis7 –

+0

Lo leí antes de publicar. Eso no aplica aquí. No estoy estableciendo el contrato para OneWay. – Mitch

+0

puede probar 'System.Web.HttpContext.Current.Request.UserHostAddress' - en caso de que HttpRequestBase no siga los mismos pasos que HttpRequest –

Respuesta

6

Tuve este problema exacto con mi registrador. Estoy usando inyección de dependencia, como sospecho que eres.

En mi caso, estaba obteniendo este error porque no estaba vinculando mi registrador al alcance de la solicitud. Por lo tanto, estaba viviendo entre solicitudes y manteniendo algunas de las propiedades HttpContext, pero arrojando excepciones sobre las que hablan con IIS.

Dado que estoy usando Ninject, esto fue simplemente una cuestión de agregar el método InRequestScope(), del espacio de nombres Ninject.Web.Common, a mi enlace.

En resumen: esta excepción parece ser lanzado para una instancia rancio de HttpContext cuando ciertas propiedades, que son movilizados a IIS y para la cual la solicitud ya no es válida, se accede.

Espero que ayude!

p.s. NLog es mejor que cualquier registrador que escriba. O, si solo quieres excepciones, pasa a ELMAH.

+1

Recibí este error de una situación algo diferente. En un servicio web ASMX, tuve algunos trabajos de acabado, potencialmente de larga ejecución, y quería hacerlo sin ralentizar la operación principal. Así que lo ejecuté con 'Task.Factory.StartNew'. Como el trabajo de acabado requería cierto acceso a HttpContext, locamente configuré HttpContext.Current desde la lambda que inició la tarea. Se bloqueó cuando intentó acceder a ServerVariables. –

Cuestiones relacionadas