HttpRequestBase.UserHostAddress выдает ошибку - PullRequest
11 голосов
/ 07 февраля 2012

Я собираю некоторую информацию о пользователях, которые посещают определенный раздел моего веб-сайта, и получаю странную ошибку. У меня есть раздел кода, который делает следующее.

string userIp = request.UserHostAddress; 

Переменная запроса является HttpRequestBase. Иногда это работает просто отлично, и я получаю IP-адрес - иногда выдает ошибку, от которой я не знаю, как защититься. Это из моего журнала ошибок.

"Значение не попадает в ожидаемый диапазон. На System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode, IntPtr errorInfo) at System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal (String name) "

Кажется, что в первый раз, когда я захожу на страницу, она работает нормально, возникает ошибка, если я делаю обновление или быстро перехожу на другую страницу, которая захватывает ту же переменную.

1 Ответ

10 голосов
/ 30 июня 2012

У меня была именно эта проблема с моим логгером. Я использую инъекцию зависимости, как я подозреваю.

В моем случае я получал эту ошибку, потому что я не привязывал свой регистратор к объему запроса. Таким образом, он жил между запросами и поддерживал некоторые свойства HttpContext, но создавал исключения для тех, которые общаются с IIS.

Поскольку я использую Ninject, это просто вопрос добавления метода InRequestScope() из пространства имен Ninject.Web.Common к моей привязке.

Короче говоря : это исключение создается для устаревшего экземпляра HttpContext при доступе к определенным свойствам, которые передаются в IIS и для которых запрос больше не действителен.

Надеюсь, это поможет!

p.s. NLog лучше любого регистратора, который вы напишите. Или, если вы просто хотите исключения, загляните в ELMAH.

...