2017-01-25 49 views
13

Nasza niebieska aplikacja internetowa Azure wyłudza błędy dotyczące kultury, która nie jest obsługiwana. Załadujemy listę krajów do wyświetlenia na pierwszej stronie, ale to nagle daje błędy. Ten sam kod jest używany również w innych aplikacjach internetowych i nie ma problemu.Kultura nagle nie jest już obsługiwana w aplikacji internetowej Azure.

Poniższy kod stanowi problem.

private List<SelectListItem> Countries() 
     { 
      RegionInfo country = new RegionInfo(new CultureInfo("nl-BE", false).LCID); 
      List<SelectListItem> countryNames = new List<SelectListItem>(); 
     foreach (CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) 
     { 
      country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); 
      countryNames.Add(new SelectListItem() { Text = country.DisplayName, Value = country.DisplayName }); 
     } 

     return countryNames.GroupBy(x => x.Text).Select(x => x.FirstOrDefault()).ToList<SelectListItem>().OrderBy(x => x.Text).ToList(); 
    } 

Umieściłem try-catch w for-each, dzięki czemu mogę wskazać kultury, które dają błędy. Następujące hodowle nagle powrocie błędy:

<errors> 
<LCID>4096</LCID> 
<Name>ar-001</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>el-CY</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-BB</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-BS</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-HK</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-NL</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>en-SE</Name> 
</errors> 
<errors> 
<LCID>4096</LCID> 
<Name>es-419</Name> 
</errors> 

Czy ktoś może mi pomóc w tej kwestii? Nie wydaje mi się, żeby to miało sens, dlaczego ta aplikacja internetowa nagle podaje te błędy.

+1

Mam dokładnie taki sam problem jak z kilka godzin temu! Zdecydowanie podejrzewam, że jest to aktualizacja/zmiana Microsoft Azure, która powoduje, że nie mamy do czynienia z naszą witryną przez wiele tygodni. Przez cały czas wyświetlany jest następujący komunikat o błędzie (czasami mogę uzyskać dostęp do strony internetowej, powiedzmy 1% czasu): Kultura nie jest obsługiwana. Nazwa parametru: kultura 4096 (0x1000) jest nieprawidłowym identyfikatorem kultury. – hamish

+0

Proszę spróbować wykorzystać to polecenie powershell "[system.Globalization.CultureInfo] :: GetCultures (" AllCultures "), aby pobrać obsługiwane kultury, uzyskując dostęp do" Debug console> PowerShell "wewnątrz [KUDU] (https: //blogs.msdn .microsoft.com/benjaminperkins/2014/03/24/using-kudu-with-windows-azure-web-sites /). Następnie spróbuj znaleźć, czy możesz znaleźć powyższe kultury. –

+0

To polecenie nie zadziałało dla mnie (spowodowało błąd), ale to zrobiło: [system.Globalization.CultureInfo] :: GetCultures ("FrameworkCultures") i wydawało się, że zwróci wszystkie kultury, w których spodziewałem się zainstalować w Serwer MS Windows/VM. – hamish

Odpowiedz

2

Potwierdzam, że są to nowe kultury, które zostały dodane do usługi Azure App Service, i ewidentnie zostało to zrobione w taki sposób, że nie udało się utworzyć elementu RegionInfo. Najprostszym repro jest:

var culture = new CultureInfo("en-HK", false).LCID; 
var region = new RegionInfo(culture); 

I że nie powiedzie się z:

Unhandled Exception: System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: culture 4096 (0x1000) is an invalid culture identifier. at System.Globalization.CultureData.GetCultureData(Int32 culture, Boolean bUseUserOverride) at System.Globalization.RegionInfo..ctor(Int32 culture)

Badamy dalej. W międzyczasie zaleca się obejście wyjątków i ignorowanie kultur tam, gdzie to się nie udaje.

+0

Proszę zobaczyć odpowiedź Shawna Steele'a, która lepiej tłumaczy, dlaczego to się nie udaje. –

12

Niemal wszystkie nowe ustawienia regionalne w systemie Windows nie mają przypisanych jednoznacznych identyfikatorów LCID - ponieważ w setkach krajów nie ma wystarczająco dużo "miejsca" dla tysięcy języków. Wszyscy otrzymują przypisane 0x1000.

W tym przypadku, myślę, że zmieniający się LCID nazwa może pracować dla Ciebie:

country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); 

po prostu użyć nazwy Kultura:

country = new RegionInfo(cul.Name); 

oczywiście wszelkie inne wykorzystanie LCID będzie również muszą rozpoznać nazwę kultury.

Zalecamy, aby regionInfo był skonstruowany z pełną nazwą kultury, ponieważ jest bardziej jednoznaczny niż nazwa regionu. RegionInfo ma pewne właściwości, które "zależą" od języków, takich jak DisplayName. Na przykład es-US i en-US udostępniają ciągi hiszpańskie lub angielskie dla "Stanów Zjednoczonych".

nadzieję, że pomoże,

-Shawn

+0

https://social.msdn.microsoft.com/Forums/pl-PL/963f02d1-bf04-430a-ab51-9c3fc0462e63/cultures-not-supported-on-azure-webapps?forum=windowsazurewebsitespreview fors referencje listy nieobsługiwanych kultura według LCID. Nazwa "potrzeby". – OzBob