Hier ist mein Problem. Ich arbeite an einer E-Commerce-Lösung, die in mehreren europäischen Ländern eingesetzt wird. Wir behalten alle Ausnahmen innerhalb der Anwendung zu SQL Server bei und ich habe gefunden, dass es Datensätze in der DB gibt, die eine DateTime in der Zukunft haben!Problem mit Callback-Methode und Pflege von CultureInfo und ASP.Net HttpRuntime
Wir definieren die Kultur in der web.config, zum Beispiel pt-PT, und das erwartete Format ist DD-MM-YYYY.
Nach dem Debugging habe ich festgestellt, dass das Problem mit diesen 'zukünftigen' Datensätzen in der Datenbank wegen der von uns verwendeten Rückrufmethoden liegt. Zum Beispiel in unserer Caching-Architektur verwenden wir Rückrufe, wie zum Beispiel -
CacheItemRemovedCallback ReloadCallBack = new CacheItemRemovedCallback(OnRefreshRequest);
Wenn ich die aktuellen Themen Culture überprüfen, auf diesen Rückrufen sind es en-US statt pt-PT und auch die Httpcontext ist Null. Wenn eine Ausnahmebedingung auf dem Rückruf auftritt, meldet unser Ausnahmemanager sie als MM-TT-JJJJ und wird daher falsch auf SQL Server gespeichert.
Leider verwenden wir im Code des Ausnahme-Managers DateTime.Now, was in Ordnung ist, wenn es kein Rückruf ist. Ich kann diesen Code nicht ändern, um kulturspezifisch zu sein, da er über andere Branchen hinweg geteilt wird.
Also, warum Callbacks in ASP.Net Kontext nicht beibehalten? Gibt es eine Möglichkeit, es auf diesem Rückruf-Thread zu verwalten? Was sind die besten Praktiken hier?
Danke.
Ja, es ist ToString. Ich stimme zu, dass die Kultur ignoriert werden sollte, um in der Datenbank zu speichern, aber das ist Legacy-Code, mit dem ich mich befassen muss. Das Problem liegt daran, dass der Rückruf den ASP.Net-Kontext und die Anwendungskultur verliert. Das möchte ich irgendwie lösen. –
Ich weiß nicht, ob dieser Rückruf im Kontext der gleichen Anfrage passiert. Wenn dies der Fall ist, können Sie die Kultur in HttpContext.Current.Items ["CultureForRequest"] speichern und im Callback herausziehen. –