Доступ к HttpContext.Session из статического метода - PullRequest
0 голосов
/ 30 октября 2018

Я получаю следующую ошибку при доступе к HttpContext.Session из статического метода, помещенного в отдельную задачу:

Сеанс не настроен для этого приложения или запроса.

Я использовал эту статью для реализации доступа к HttpContext вне контроллера

Из контроллера я вызываю этот статический метод, который использовался для извлечения данных изображения:

public static void CreateDummyGallery(Gallery gallery)
{
    Logger.LogDebug(LogModule.Dummy, $"Starting gallery creation.");
    Task.Factory.StartNew(() =>
    {
        try
        {
            List<DummyPicture> pictures;
            using (var context = new MyzeumContext())
            {
                int top = 10;
                pictures = context.DummyPictures.FromSql($"SELECT * FROM dummypictures ORDER BY RAND() LIMIT {top}").ToList();
            }
            Logger.LogDebug(LogModule.Dummy, $"Starting retrieving images.");
            Parallel.ForEach(pictures, picture => {
                using (WebClient client = new WebClient())
                {
                 }
             });
            Logger.LogDebug(LogModule.Dummy, $"Done retrieving images.");
        }
        catch(Exception e)
        {
            Logger.LogError(LogModule.Server, e.Message, e);
        }
    });
}

Проблема возникает в Logger.LogDebug (), потому что именно здесь я получаю доступ к HttpContext:

public void LogDebug(LogModule module, string message, Exception stackTrace = null)
{
    Log record = new Log();
    record.Module = module;
    record.ThreadId = Environment.CurrentManagedThreadId;
    record.SessionId = HttpContextHelper.Current?.Session?.Id;
    record.Message = message;
    record.Logged = DateTime.UtcNow;
    if(stackTrace != null)
    {
        record.Message += $" :{stackTrace.StackTrace}";
    }
    queue.Enqueue(record);
}

Проблема 99% возникает при первом вызове внутри задачи:

Logger.LogDebug(LogModule.Dummy, $"Starting retrieving images.");

НО, сразу после запуска приложения весь этот блок задач работает нормально и не выдает никаких исключений. Проблема начинается после следующих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...