Milý deníčku,

tak jsem se zase poškorpil s ASP.NET-em. Implementoval jsem do aplikace asynchronní volání (AsyncCallback), vše funguje tak jak má (tedy ve vývojovém a testovacím prostředí, tam obvykle funguje všechno bez problémů). Zrada nastala až po nasazení nové verze do provozního prostředí (to je vlastně taky celkem normální)...funkce volaná asynchronně padá na funkci DateTime.Parse. Kontroluju data - ta jsou v pořádku, pak pro jistotu nastavení culture ve web.config ... tam je správně cs-CZ.

Po dalších testech jsem začal mít podezření že asynchronní volání nerespektuje nastavení z web.config. Jakou kulturu ale tedy použije ? V machine.config nastavení culture není...odkud se tedy přebírá ? Aha -musí to tedy být systémové nastavení Windows 2003 serveru. Při přepnutí do anglického nastavení a zpět do českého však není patrná žádná změna...pomalu začínám v duchu spílat Billovi G.

Zabrouzdal jsem tedy na Googlu jak se to má s nastavením národního prostředí ve Windows 2003 a brzy jsem začal mít podezření že všechno má na svědomí nastavení národního prostředí při instalaci. To se běžně zjistit nedá (pokud ano tak se přiznám že jsem nepřišel na to jak) takže jsem použil osvědčenou cestu do registrů; nastavení národního prostředí při instalaci lze zjistit prozkoumáním klíčů v profilech systémových uživatelů Local System a Network System (mají vždycky stejný SID)

HKEY_USERS\S-1-5-18\Control Panel\International
HKEY_USERS\S-1-5-19\Control Panel\International

Aktuální defaultní nastavení windows (aplikuje se však jen na nově vytvořené uživatelské profily) je pak v

HKEY_USERS\.DEFAULT\Control Panel\International

To už jsem byl téměř "doma" - asp.net při asynchronním volání nepoužije nastavení z web.config ale nastavení z profilu účtu Local System (pod ním běží IIS). Zbývalo jen ověřit v praxi..bohužel mám k dispozici jen virtual machine instalovanou s českými nastaveními, takže pro zpestření jsem ještě instaloval další virtual machine s nastavením anglickým.

Samotná úprava kódu je triviální, unvitř asynchronní metody se nastaví Thread.CurrentCulture a mohl jsem to udělat hned na začátku....ale...nevím jak koho ale mně štve když neco nefunguje a nevím proč :-)

PH

posted on Thursday, June 14, 2007 4:22 PM

Feedback

No comments posted yet.
Title  
Name  
Url
Comments   
Ochrana proti SPAMU: Výsledok 2 + 5 je?