Я получаю следующую ошибку при доступе к 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.");
НО, сразу после запуска приложения весь этот блок задач работает нормально и не выдает никаких исключений. Проблема начинается после следующих запросов.