2015-03-18 12 views
14

Aby wyjaśnić tytuł.W jaki sposób ustawić lokalizację użytkownika aplikacji IIS puli tożsamości, gdy jest ona ustawiona na ApplicationPoolIdentity

Po utworzeniu puli aplikacji w IIS nadajesz jej nazwę. Następnie możesz ustawić tożsamość na ApplicationPoolIdentiy.

System Windows tworzy użytkownika magicznego, którego nie widać. Powiedzmy, że nazwa puli aplikacji to MyTestAppPool, więc skończy się użytkownikiem o nazwie MyTestAppPool (IIS AppPool \ MyTestAppPool).

Kiedy to się dzieje, system Windows używa bieżących ustawień narodowych serwerów. Powiedzmy, że to było wtedy USA.

Później zmienisz go na UK. Chociaż istnieje kopia, to nie kopiuje ona do tych magicznych użytkowników, których znalazłem. Zatem twój serwer jest ustawiony na UK, podczas gdy MyTestAppPool jest ustawiony na US.

Kiedy więc działa strona internetowa i trzeba powiedzieć, sformatować coś w walucie w odpowiednim ustawieniu narodowym, otrzymasz walutę amerykańską z powodu AppPool zamiast waluty brytyjskiej.

Czy istnieje sposób zmiany ustawień narodowych użytkownika AppPool?

Jedynym sposobem, jaki znalazłem, jest usunięcie puli aplikacji i odtworzenie jej ponownie po ustawieniu lokalizacji serwera na żądane. Co jeśli nie chcę tego robić.

Co się stanie, jeśli muszę mieć wiele witryn internetowych działających w różnych lokalizacjach, w jaki sposób ustawić dla każdego użytkownika ustawienia regionalne AppPoolIdentity bez konieczności zmiany serwera na to, co chcę, zanim utworzę obiekt?

+0

nie można zmienić z rejestru w HKEY_USERS \ \ Panel sterowania \ International, jak wyjaśniono tutaj http://stackoverflow.com/questions/1202515/where-does-asp-and-is-6-0-get-its-date-format? –

+0

* 1) * Ustawienia regionalne należą do użytkownika. Co masz na myśli, gdy mówisz, * klient zażądał, aby użyć lokalnego systemu *? * 2) * Na czym polega problem z tworzeniem niektórych lokalnych użytkowników na serwerze w celu wykorzystania tożsamości puli aplikacji? –

+0

Nie rozwiązuje to jednak problemu, jeśli ustawisz CurrentThread.Culture = "en-GB" podczas uruchamiania aplikacji i dla każdego żądania, wtedy zlokalizowane procedury będą działać w tych ustawieniach narodowych. –

Odpowiedz

0

Najlepszym sposobem rozwiązania tego problemu jest utworzenie własnego konta użytkownika, przypisanie tego użytkownika do puli aplikacji. Następnie możesz zmienić ustawienia regionalne tego użytkownika, logując się jako użytkownik.

Upewnij się, że użytkownik ma dostęp do plików internetowych

rzucić okiem na ten link

https://www.bluevalleytech.com/techtalk/blog/assigning-ntfs-folder-permission-to-iis7-application-pools.aspx

+0

Niestety nasi klienci nie pozwalają nam tworzyć i logować się jako użytkownicy w ich sieci, więc nie będzie to dla nas opcja. –

+0

Następnie musisz ustawić kulturę w swojej aplikacji internetowej, spójrz na ten https://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.140).aspx – Ockert

+0

Problem z tym, że klient zażądał użycia lokalnego systemu, więc ustawienie go na stronie lub web.config nie zadziała, jeśli zdecydują się na zmianę lokalnego. Czy można ustawić ustawienia narodowe w oparciu o ustawienia regionalne systemu, a nie ustawienia narodowe użytkownika uruchamiającego aplikację AppPool? –

2

Można ustawić kultury aplikacji za pośrednictwem pliku web.config lub na poziomie strony . To powinno zastąpić kulturę użytkownika puli aplikacji.

przyjrzeć się tej https://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.140).aspx

+0

Problem polega na tym, że klient zażądał użycia lokalnego systemu, więc ustawienie go na stronie lub web.config nie zadziała, jeśli zdecydują się na zmianę lokalnego. Czy można ustawić ustawienia narodowe w oparciu o ustawienia regionalne systemu, a nie ustawienia narodowe użytkownika uruchamiającego aplikację AppPool? –

+0

Wtedy nie można naprawić problemu. – Ockert

0

można programowo zmienić kulturę swojej aplikacji poprzez ustawienie tego w Global.asax:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture; 
} 

gdzie CultureInfo.CurrentCulture powróci swoją kulturę OS.

Więcej informacji na ten temat można znaleźć w https://support.microsoft.com/pl-pl/kb/306162, detect os language from c#.

+0

Ale nie o to chodzi, aby ręcznie obsłużyć kulturę w kodzie. Rozwiązanie powyższego global.ax jest drogą do zrobienia. Ustaw i zapomnij! – Fandango68

+0

@ Fernando68 Ekhm ... i jak ustawienie kultury w global.asax nie ustawia jej ręcznie przez kod? A jeśli przeczytasz moją odpowiedź, będziesz wiedział, że proponuję ustawić ją w Global.asax ... – Lesmian

+0

Nie jestem pewien, czy podążam za tobą, ale moim celem było po prostu zmienić ją raz i przejść dalej. – Fandango68

6

Podczas tworzenia i używania tożsamości puli aplikacji tworzony jest "użytkownik", a folder o numerze C:\Users\AppPoolName.

W C:\Windows\System32\inetsrv\config\applicationHost.config jest elementem, który na moim komputerze wygląda następująco:

<applicationPoolDefaults managedRuntimeVersion="v4.0"> 
    <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="false" /> 
</applicationPoolDefaults> 

Połączenie tych dwóch ustawień określa środowisko (a więc regionu) ustawienia tożsamość puli aplikacji działa jak.

Powinieneś być w stanie dowiedzieć się unikalny identyfikator, sprawdzając w HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist dla użytkownika, który ładuje ..\Users\AppPoolName\NTUSER.DAT a następnie dopasować go z ustawieniami w HKEY_USERS\UnqiueId\ControlPanel\International\Locale ustawień.

Może być po prostu łatwiej ustawić setProfileEnvironment="false", chyba że potrzebujesz ustawień.

+2

Po ustawieniu setProfileEnvironment = "false", skąd pochodzi wartość środowiska? Jakie środowisko użytkownika? –

+0

@ pm_2 To naprawdę dobre pytanie - nie mogłem znaleźć odpowiedzi, szukając google. Sądzę, że albo ich nie załaduje, albo używa bieżących ustawień serwera. Przepraszam, że nie chcę więcej pomocy. –

2

Twoja strona internetowa nie powinna opierać się na konfiguracji serwera, aby działała zgodnie z ustawieniami regionalnymi. Powinieneś ustawić Thread.Culture i Thread.UICulture w swoim pliku Global.asax lub w pliku web.config.

Jeśli robisz to w swoim projekcie, chronisz się przed problemami ze środowiskiem.

W ten sposób łatwiej będzie korzystać z różnych ustawień lokalnych w różnych witrynach.

0

Nie chcesz użyć CultureInfo.CurrentCulture (ta zwraca kultury bieżącego wątku), ale zamiast używać CultureInfo.InstalledUICulture

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    Thread.CurrentThread.CurrentCulture = CultureInfo.InstalledUICulture; 
    //sets the thread culture to OS language. 
} 
Powiązane problemy