|
|
|
 |
 |
Dimon aka Manowar Blog. HttpContext в обработчиках событий HttpApplication. Комментарии. |
 |
|
 |
 |
До недавнего времени я был свято уверен, что в процессе обработки запроса HttpContext.Current не может быть null. В связи с чем для доступа к классам контекста реквеста использовал всегда именно это выражение. Например для того, чтобы достучаться к кукам в обработчике Application.BeginRequest смело писал HttpContext.Current.Request.Cookies. Но сегодня я с неприятным удивлением обнаружил, что бывают ситуации, когда HttpContext.Current в обработчике события обработки реквеста может быть пустой . Причем почему он вдруг оказывался пустым я понять так и не смог. Если подробней, то дело было так - совершенствуя свою систему статистики я перенес вызов метода логирования в обработчик PreSendRequestHeaders дабы ловить StatusCode ответа. После чего в логах обнаруживаю достаточно немалое количество ошибок из метода логирования (срабатывал код обработчика Application.Error). При этом, что самое удивительное, реквест отдавался нормально (200 ответ и html код). Почему выполнение реквеста не прерывалось я уж не стал разбираться, меня больше интересовала ситуация как это исправить. И после некоторого кол-ва шаманских отладок я обнаружил удивительное - в некоторых случаях (в каких именно опять таки я так и не понял, вернее обломался разбираться) в обработчике PreSendRequestHeaders значение HttpContext.Current было равно null, но при этом значение (sender as HttpApplication).Context хранило абсолютно правильный контекст! Шок - это по нашему?
Вообщем мой всем совет - пользуйтесь в обработчиках события HttpApplication конструкцией (sender as HttpApplication).Context для доступа к контексту реквеста.
Если вдруг облом меня не сломает и я продолжу изыскания - расскажу чего у меня получилось нарыть.
Dimon aka Manowar
02 August 2006 23:19
|
| 05 August 2006 12:43 |
Sheryld |
немного оффтопикаА такой вопрос, почему у тебя код (в статье) не содержит практически нигде try/catch, в dot net же вроде каждая мелочь кидает exception?
твой null бы наверняка отловился бы гораздо быстрее?
|
| 06 August 2006 19:21 |
Dimon aka Manowar |
А толку то?Меня ж волновало не от, что там null, а то, как выцепить текущий контекст обработки. Да и почему вызываемое исключение при этом не прибило опять таки текущее выполнение, но поймалось в Application.Error.
А try-catch я недолюбливаю. Исключая ситуации проверки входных данных ессно - там без него зачастую не обойтись
|
| 09 August 2006 20:01 |
Sheryld |
хммА почему такая нелюбовь к try/catch, это же практически единственное "правильное" средство обработки runtime-ошибок в ОО-средах разработки?
|
| 10 August 2006 02:25 |
Dimon aka Manowar |
Кто зна...Наверное это отголоски того, что учился я програмить на процедурных языках
|
| 17 August 2006 13:13 |
GreenBee |
Эта ошибка у меня тож часто вылазилаТак я просто поставил проверку на null и забил на это:)
Но твой вариант мне больше нравится, спасибо
|
|
|
|
 |
 |
 |
 |
|
|