Получение текущего идентификатора пользователя извне контроллера

#asp.net

Вопрос:

В настоящее время я внедряю фоновую службу в веб-приложении, в которой эти службы получили реализацию метода, для которого требуется получить текущий идентификатор пользователя, вошедшего в систему.

я пытаюсь получить доступ к текущему вошедшему в систему пользователю, но выполнение этого вызова, очевидно, извне контроллера, вызывает ошибку со следующим сообщением = «Ссылка на объект не установлена для экземпляра объекта».

  public class ScopedProcessingService: IScopedProcessingService
{
    private readonly ILogger<ScopedProcessingService> logger;
    private readonly IEweUserManager eweUserManager;
    private IHttpContextAccessor _contextAccessor;
    public ScopedProcessingService(IEweUserManager eweUserManager,
        ILogger<ScopedProcessingService> logger, IHttpContextAccessor contextAccessor)
    {
        this.logger = logger;
        this.eweUserManager = eweUserManager;
        _contextAccessor = contextAccessor;
    }

    public async Task DoWork(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            try
            {
                await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken);
      var userId = _contextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
  /* i am getting the error in this line */
                

                if (!string.IsNullOrEmpty(userId))
                {
                    var result = await eweUserManager.FindAsync(userId);
                    if (result.IsSuccess)
                    {
                       .. the rest of the code
                    }
                    
                }
            }
            catch(Exception ex)
            {
                logger.LogError(ex, ex.Message);
            }
        }
    }
}
 

Комментарии:

1. Если вы выполняете фоновую службу, HttpContext отсутствует, поэтому целесообразно использовать IHttpContextAccessor. Что именно вы делаете с этой услугой? Чего вы пытаетесь достичь и что должно инициировать этот процесс?

2. основная цель этой фоновой службы-передавать текущий идентификатор пользователя каждые 10 секунд, пока пользователь входит в систему с помощью метода WCF, который затем реализует другие методы

3. есть ли что-нибудь, что может помочь мне получить текущий идентификатор пользователя, вошедшего в систему, в этой фоновой службе ?

4. Это, вероятно, было бы чем-то, что вам пришлось бы начинать с HttpContext. Оттуда вы можете вызвать службу WCF или, возможно, добавить запись в какую-либо очередь, а затем попросить фоновую службу забрать идентификатор пользователя из очереди и отправить его в службу WCF. Но давайте вернемся еще дальше: какова на самом деле цель этого? Вы просто пытаетесь отследить, когда пользователь находится на вашем сайте? Если бы я был нетехническим человеком, как бы вы описали цель того, что вы пытаетесь сделать?

5. есть ли способ запустить службу, например, из домашнего контроллера, который поможет мне вызвать службу для запуска, а также я могу передать идентификатор пользователя