ASP.NET MVC Урок 1-F / ASP.NET MVC Урок 1
.pdfсобытий. В результате все модули сохраняют свои текущие состояния.
Application_ResolveRequestCache – наступает, когда ASP.NET выполняет запрос авторизации. Это позволяет модулям кеширования обработать запрос и обслужить из кэша, минуя обработчик выполнения.
Application_UpdateRequestCache – наступает, когда ASP.NET завершает выполнение обработчика, чтобы модули кеширования могли сохранить результат для использования в последующих ответах.
Application_AuthenticateRequest – наступает, когда модуль идентификации устанавливает личность текущего пользователя как действительную. В текущий момент, учетные данные пользователя уже проверены.
Application_AuthorizeRequest – наступает, когда модуль авторизации подтверждает, что пользователь может иметь доступ к ресурсам.
Session_Start – наступает, когда новый пользователь заходит на сайт.
Session_End – наступает, когда истекает время сессии пользователя, или он покидает сайт.
Хорошо. Теперь, чтобы воочию убедимся, что всё именно так и происходит, добавим протоколирование и сделаем это через добавление NLog модуля в NuGet.
Package Manager Console
В NuGet есть консоль для выполнения команд по установке\удалению\поиску модулей, и других вещей, типа скаффолдинга.
Для вывода всех установленных модулей пишем:
*HW 3DFNDJH
Для получения всех доступных к установке модулей:
*HW 3DFNDJH ±/LVW$YDLODEOH
Для получения всех доступных модулей с названием NLog
*HW 3DFNDJH /LVW$YDLODEOH )LOWHU 1/RJ
Или
*HW 3DFNDJH /LVW$YDLODEOH_ ZKHUH^ B ,G PDWFK1/RJ` ɷɬɨ ɞɨɥɶɲɟ
Для установки модуля NLog необходимо вначале выбрать проект (если их в солюшене больше одного) и ввести команду:
,QVWDOO 3DFNDJH 1/RJ
Файлы копируются в проект, добавляются ссылки на сборки и web.config может быть обновлен. Для удаления из проекта модуля необходимо, чтобы он не был связан с другими модулями. Удаляем так:
8QLQVWDOO 3DFNDJH 1/RJ
NLog
После установки пользуемся документацией на NLog (https://github.com/nlog/nlog/wiki/Tutorial) и добавляем в Web.config:
FRQILJ6HFWLRQV!
VHFWLRQ QDPH QORJ W\SH 1/RJ &RQILJ &RQILJ6HFWLRQ+DQGOHU 1/RJ!
QORJ [POQV KWWS ZZZ QORJ SURMHFW RUJ VFKHPDV 1/RJ [VG [POQV [VL KWWS ZZZ Z RUJ ;0/6 FKHPD LQVWDQFH!
WDUJHWV!
WDUJHW QDPH ORJILOH [VL W\SH )LOH ILOH1DPH & ILOH W[W!
WDUJHWV!
UXOHV!
ORJJHU QDPH PLQOHYHO ,QIR ZULWH7R ORJILOH!
UXOHV!QORJ!
Мы ее потом исправим. Добавим в код (Global.asax.cs):
SXEOLF FODVV 0YF$SSOLFDWLRQ 1LQMHFW+WWS$SSOLFDWLRQ
^
SULYDWH VWDWLF1/RJ /RJJHU ORJJHU 1/RJ /RJ0DQDJHU *HW&XUUHQW&ODVV/RJJHU
и
SURWHFWHG YRLG $SSOLFDWLRQB6WDUW
^
ORJJHU ,QIR $SSOLFDWLRQ 6WDUW
$UHD5HJLVWUDWLRQ 5HJLVWHU$OO$UHDV
)LOWHU&RQILJ 5HJLVWHU*OREDO)LOWHUV *OREDO)LOWHUV )LOWHUV
5RXWH&RQILJ 5HJLVWHU5RXWHV 5RXWH7DEOH 5RXWHV
%XQGOH&RQILJ 5HJLVWHU%XQGOHV %XQGOH7DEOH %XQGOHV
`
SXEOLF YRLG ,QLW
^
ORJJHU ,QIR $SSOLFDWLRQ ,QLW
`
SXEOLF YRLG 'LVSRVH
^
ORJJHU ,QIR $SSOLFDWLRQ 'LVSRVH
`
SURWHFWHG YRLG $SSOLFDWLRQB(UURU
^
ORJJHU ,QIR $SSOLFDWLRQ (UURU
`
SURWHFWHG YRLG $SSOLFDWLRQB(QG
^
ORJJHU ,QIR $SSOLFDWLRQ (QG
`
Запустим и завершим приложение (Stop). Откроем файл C://file.txt. Мы увидим, какие события происходили.
_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 6WDUW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ ,QLW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ ,QLW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ %HJLQ5HTXHVW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ$XWKHQWLFDWH5HTXHVW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ$XWKRUL]H5HTXHVW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 5HVROYH5HTXHVW&DFKH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_6HVVLRQ 6WDUW_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ$FTXLUH5HTXHVW6WDWH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 3UH5HTXHVW+DQGOHU([HFXWH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 3UH5HTXHVW+DQGOHU([HFXWH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 5HOHDVH5HTXHVW6WDWH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 8SGDWH5HTXHVW&DFKH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ (QG5HTXHVW
_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 3UH6HQG5HTXHVW+HDGHUV_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_6HVVLRQ (QG_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 'LVSRVH_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ (QG_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 'LVSRVH
В Application_Start выполняется регистрация:
Area (области),
Filter (фильтры),
Bundle (комплекты),
Route (маршруты).
Подробности по инициализации Filter, Вundle и Route находятся в папке App_Start.
WebActivator
WebActivator – это модуль, который позволяет запустить код до самого первого старта App_Start. Это может быть необходимо для того, чтобы, к примеру, создать тестовую БД перед запуском. Установим:
,QVWDOO 3DFNDJH :HE$FWLYDWRU([
Добавим класс в App_Start папку:
>DVVHPEO\ :HE$FWLYDWRU 3UH$SSOLFDWLRQ6WDUW0HWKRGW\SHRI3UH6WDUW$SS6WDUW@ QDPHVSDFH /HVVRQ$SSB6WDUW
^
SXEOLF VWDWLF FODVV 3UH6WDUW$SS
^
SULYDWH VWDWLF1/RJ /RJJHU ORJJHU 1/RJ /RJ0DQDJHU *HW&XUUHQW&ODVV/RJJHU
VXPPDU\!
Ɇɟɬɨɞ ɡɚɩɭɫɤɚɟɬɫɹ ɨɞɢɧ ɪɚɡ ɩɟɪɟɞ ɫɬɚɪɬɨɦ ɩɪɢɥɨɠɟɧɢɹ
VXPPDU\!
SXEOLF VWDWLF YRLG 6WDUW
^
ORJJHU ,QIR $SSOLFDWLRQ 3UH6WDUW
`
`
`
В файле логов увидим, что строка Application PreStart исполняется раньше Application Start:
_,1)2_/HVVRQ$SSB6WDUW 3UH6WDUW$SS_$SSOLFDWLRQ 3UH6WDUW
_,1)2_/HVVRQ 0YF$SSOLFDWLRQ_$SSOLFDWLRQ 6WDUW
Создадим четыре файла отдельно для trace (трассировки), debug (отладки), info (информации), error (ошибки). Определим место записи:/Contents/logs/[текущая дата] Перепишем конфигурацию:
QORJ DXWR5HORDG WUXH [POQV KWWS ZZZ QORJ SURMHFW RUJ VFKHPDV 1/RJ [VG [POQV [VL KWWS ZZ Z Z RUJ ;0/6FKHPD LQVWDQFH!
YDULDEOH QDPH ORJ'LUHFWRU\ YDOXH ^EDVHGLU` &RQWHQW ORJV ^VKRUWGDWH`!
WDUJHWV!
WDUJHW QDPH ILOH/RJ7UDFH [VL W\SH )LOH ILOH1DPH ^ORJ'LUHFWRU\` WUDFH W[W!
WDUJHW QDPH ILOH/RJ'HEXJ [VL W\SH )LOH ILOH1DPH ^ORJ'LUHFWRU\` GHEXJ W[W!
WDUJHW QDPH ILOH/RJ,QIR [VL W\SH )LOH ILOH1DPH ^ORJ'LUHFWRU\` LQIR W[W!
WDUJHW QDPH ILOH/RJ(UURUV [VL W\SH )LOH ILOH1DPH ^ORJ'LUHFWRU\` HUURUV W[W!
WDUJHWV!
UXOHV!
ORJJHU QDPH OHYHO 7UDFH ZULWH7R ILOH/RJ7UDFH!
ORJJHU QDPH OHYHO 'HEXJ ZULWH7R ILOH/RJ'HEXJ!
ORJJHU QDPH OHYHO ,QIR ZULWH7R ILOH/RJ,QIR!
ORJJHU QDPH PLQOHYHO :DUQ ZULWH7R ILOH/RJ(UURUV!
UXOHV!QORJ!
Log2Console
Для NLog есть еще классная программа Log2Console, которая позволяет получать логи прямо в окне программы.
Запускаем программу и настраиваем приемщик:
В Web.config пишем:
WDUJHW QDPH 7FS2XWOHW [VL W\SH 1/RJ9LHZHU DGGUHVV WFS ORFDOKRVW!
Обращаю внимание, что писать надо address=”tcp4://…”, а неaddress=”tcp://…”
Все исходники находятся по адресу https://bitbucket.org/chernikov/lessons