Кто-нибудь знает, почему это происходит? И есть ли какое-нибудь решение этой проблемы?
Изменить: Вот пример кода, чтобы сделать его немного понятнее (надеюсь):
Код: Выделить всё
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
try
{
var user = _getUserName(changeDescription.SessionId);
if (changeDescription.Reason == SessionChangeReason.SessionLock ||
changeDescription.Reason == SessionChangeReason.SessionLogoff ||
changeDescription.Reason == SessionChangeReason.ConsoleDisconnect)
LogText(String.Format("{0} locked at {1}\r\n", user, DateTime.Now));
else if (changeDescription.Reason == SessionChangeReason.SessionUnlock ||
changeDescription.Reason == SessionChangeReason.SessionLogon ||
changeDescription.Reason == SessionChangeReason.ConsoleConnect)
LogText(String.Format("{0} unlocked at {1}\r\n", user, DateTime.Now));
base.OnSessionChange(changeDescription);
}
catch (Exception e)
{
LogText("Exception: " + e);
}
}
Иногда в моем журнале я получайте такие вещи:
Пользователь A разблокирован 18.01.2015 08:40:29
Пользователь A разблокирован 18.01.2015 08:44:28
Пользователь А заблокирован 18.01.2015 08:44:28
Вот что произошло сегодня утром. ПользовательA вошел в систему, затем заблокировался и сразу (я думаю) вошел снова. Но два последних события были запущены в неправильном порядке, поэтому после этой последовательности моя служба ошибочно подумала, что UserA исчез.
Часто я получаю несколько событий разблокировки в одном строка, как эта вчерашняя:
Пользователь А разблокирован 17.01.2015 10:55:26
Пользователь А разблокирован 17.01.2015 10:55:26UserA разблокирован 17.01.2015 10:56:33
Или я могу получить несколько событий блокировки подряд, что, вероятно, означает, что я пропал одно или несколько событий разблокировки между ними:
Пользователь A разблокирован 17.01.2015 09:29:35
Пользователь A заблокирован 17.01.2015 10:25: 28
Пользователь A заблокирован 17.01.2015 10:30:20
Подробнее здесь: https://stackoverflow.com/questions/280 ... unreliable