Я пишу службу Windows (с использованием C #, WCF), которая предназначена для записи события сеанса пользователя Windows и публикации его в какой-либо другой службе WCF.
Ниже приведенный код иногда работает, как ожидается, но не всегда.Он возвращает пустой в основном в событиях SessionUnlock, SessionLogoff.
var usernmae = Machine.getInstance().getUsername();
Приведенная выше строка кода используется внутри служебной функции, которая вызывается из события OnSessionChange службы Windows, как показано ниже: -
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
var sessionDetails = sessionLogger.BuildSessionDetails(changeDescription);
....
}
и эта функция BuildSessionDetails имеет вид: -
public class SessionLogger : ISessionLogger
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public SessionDetails BuildSessionDetails(SessionChangeDescription changeDescription)
{
SessionDetails sd = new SessionDetails();
sd.ChangeTime = DateTime.Now.ToUniversalTime();
sd.SessionId = changeDescription.SessionId.ToString();
sd.ChangeType = changeDescription.Reason.ToString();
//This is where I am EXTRACTING USERNAME
sd.Username = Machine.getInstance().getUsername();
...
...
}
}
Ожидаемый результат - имя пользователя все время, когда происходит событие сеанса.
Любая идея о том, что происходит или вызывает здесь, не возвращаетсяимя пользователя всегда?