Język wyjątków w ASP.NET

.NET, Studia, technicznie Zostaw komentarz

Od jakiegoś czasu pracuję nad aplikacjami webowymi tworzonymi w ASP .NET. Platforma ta posiada taki “fajny” feature, który generuje wyjątki w języku strony: UICulture language. Chodzi o wyjątki generowane przez maszynę wirtualną czyli wiadomości dla NullPointerException to

“Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.”

a NotImplementedException ma Message:

“Metoda lub operacja nie jest zaimplementowana.”

Widząc taki komunikat każdy średnio zaawansowany programista poradzi sobie bez wujka G. Ale gdy treść komunikatu brzmi:

“Istniejący obiekt w obiekcie ObjectContext jest w stanie Added. Zmiany można zastosować tylko wtedy, gdy istniejący obiekt jest w stanie niezmieniony lub zmodyfikowany.”

sytuacja nieco się komplikuje.

Dlatego właśnie ten piękny w swojej idei pomysł M$ jest strasznie głupi i zamiast ułatwiać, komplikuje życie. Jeden argument opisałem wyżej: EnglishNETCommunity.size() > PolishNETCommunity.size(). Dodatkowo każda dobrze napisana aplikacja nigdy nie wyświetli użytkownikowi komunikatu wygenerowanego przez maszynę wirtualną - opisy są tylko dla programisty. Zaprezentowany powyżej komunikat sugeruje istnienie trzech stanów dla obiektu: Added, zmieniony, niezmieniony. BRAWO

Ponarzekałem - i od razu lepiej. A teraz jak sobie poradzić z takim stanem rzeczy. Najlepiej ustawić sobie w projekcie UICulture oraz Culture na “auto”. A robi się to w ten prosty, oczywisty i banalny sposób: Należy wyedtować plik: Web.config UWAGA chodzi o plik znajdujący się w głównym katalogu projektu(w projektach MVC są 2 pliki Web.config :O WTF?). W głównym elemencie “configuration” odszukujemy node: “system.web” i dodajemy nowy child-node globalization o następującej treści:
<globalization uiCulture="auto" culture="auto" />
Dzięki takiemu ustawieniu zmianę Culture będziemy dokonywać w ustawieniach przeglądarki w preferowanym języku. Aby ustawić na sztywno kulturę trzeba zamiast auto wpisać en-US(lub inną szczegółową lokalizację), podanie samego en skutkuje wyrzuceniem wyjątku - oczywiście w języku polskim. Można także włączyć globalizację tylko dla jednej strony. W takim wypadku należy dodać w nagłówku strony ASP tag:
<%@ Page UICulture="en-US" Culture="en-US" %>
Aby ustawić globalizację programowo można zastosować poniższe polecenie:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
Jak widać zmiana dotyczy wątku a nie aplikacji także nie można sobie tego wpisać gdzie popadnie ;-)

A mój wyjątek brzmi teraz tak:

The existing object in the ObjectContext is in the Added state. Changes can only be applied when the existing object is in an unchanged or modified state.

I wszystko jasne - trzeba było tak od razu ;-)

Edit: widzę że jest tu kilku gości od wujka G. Roziazanie problemu opisałem na stackoverflow

Zostaw komentarz

Silnik: Wordpress - Theme autorstwa N.Design Studio. Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj