Вот моя проблема. Я работаю над решением для электронной коммерции, которое развернуто в нескольких европейских странах. Мы сохраняем все исключения в приложении для SQL Server, и я обнаружил, что в БД есть записи с датой и временем в будущем!
Мы определяем культуру в файле web.config, например, pt-PT, а ожидаемый формат — ДД-ММ-ГГГГ.
После отладки я обнаружил, что проблема с этими «будущими» записями в БД связана с используемыми нами методами обратного вызова. Например, в нашей архитектуре кэширования мы используем обратные вызовы как таковые:
CacheItemRemovedCallback ReloadCallBack = new CacheItemRemovedCallback(OnRefreshRequest);
Когда я проверяю текущие потоки CultureInfo, в этих обратных вызовах это en-US вместо pt-PT, а также HttpContext имеет значение null. Если при обратном вызове возникает исключение, наш диспетчер исключений сообщает об этом как MM-DD-YYYY и, таким образом, оно неправильно сохраняется в SQL Server.
К сожалению, в коде диспетчера исключений мы используем DateTime.Now, что нормально, если это не обратный вызов. Я не могу изменить этот код, чтобы он соответствовал культуре, поскольку он используется в других вертикалях.
Итак, почему обратные вызовы в ASP.Net не поддерживают контекст? Есть ли способ сохранить его в этом потоке обратного вызова? Каковы лучшие практики здесь?
Спасибо.