sunil kumar meena Ответов: 1

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


Предположим,что в приложении одновременно несколько пользователей находятся в сети. И по какой-то причине 4 пользователя получили исключения. Поскольку у нас есть глобальная обработка исключений, реализованная в нашем файле Global.asax, мы показываем пользовательскую страницу ошибок всем пользователям и регистрируем ошибку, используя приведенный ниже код:

var currentException = Server.GetLastError();
logger.LogDetails(currentException); // some logging code
Server.ClearError();


Пользователь 1 получил исключение Divide by zero.
Пользователь 2 получил недопустимый литой исключение.
Пользователь 3 получил исключение Index out of range.
Пользователь 4 получил некоторое Sqlexception.

Что будет с этим сервером.GetLastError () return в этом случае?

Кроме того, мне нужно регистрировать исключения. Так что думайте об этом так: я хочу регистрировать исключение на основе пользователя в качестве ключа и деталей исключения в качестве описания. Таким образом, для пользователя 1 будет запись в журнале примерно такая: User=U1, ExceptionDescription="Divide By zero".

Я могу получить текущего пользователя с помощью HTTPContext, но все еще не могу получить исключение, которое произошло в их сеансе. Как я могу этого достичь?

Что я уже пробовал:

Похоже, что "сервер" не является специфичным для пользователя. Поэтому, если мы попытаемся прочитать GetLastError из этого, он вернет все, что произошло в прошлом исключении.

1 Ответов

Рейтинг:
8

sunil kumar meena

GetLastError: is thread safe. It retrieves the calling thread's last-error code value. The last-error code is maintained on a per-thread basis. Multiple threads do not overwrite each other's last-error code. 


var currentException = Server.GetLastError();
var user = HttpContext.Current.User;
logger.LogDetails(currentException, user); // some logging code
Server.ClearError();