2016-09-07 11 views
10

Ustawienie roli lazuru jest bardzo użyteczne, ponieważ pozwala zmieniać wartości w locie, podczas gdy uruchomiony jest IIS. Ale problem polega na tym, że jeśli masz wielu użytkowników i jeśli czytasz za każdym razem wartość konfiguracyjną z pliku, nie najlepiej jest używać go bez umieszczania go w zmiennej statycznej. Następny problem, jeśli umieścisz go w zmiennej statycznej , musisz zresetować IIS za każdym razem, gdy ją zmienisz. Zrobiłem trochę badań i znalazłem podobne pytanie na stackoverflow, które mówi, że tylko pierwszy raz czyta conf na pliku, a następnie przechowuje je w pamięci podręcznej. Ale to pytanie, na które udzielono odpowiedzi, dotyczy: ConfigurationManager, moje jest około RoleManager z Azure.Czy RoleEnvironment.GetConfigurationSettingValue czyta za każdym razem z pliku cfg?

Jest to linia, która staje się aktualne ustawienie na lazurowym:

RoleEnvironment.GetConfigurationSettingValue("Appname.settingKey"); 

to jest taki, który zapisuje je w pamięci podręcznej, co wiem, jak to działa i pobiera aktualne ustawienie np .: ConnectionString w webconfig:

ConfigurationManager.ConnectionStrings["SettingKey"].ConnectionString; 
+0

Czy możesz udostępnić łącze do pytania dotyczącego przepełnienia stosu, o którym wspomniano powyżej? –

+0

tak, na pewno: http://stackoverflow.com/questions/13357765/does-configurationmanager-appsettingskey-read-from-the-web-config-file-each-ti –

Odpowiedz

7

https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.serviceruntime.roleenvironment.changed.aspx Oto link do zmiany.

Jeśli zastosujemy typy dół można dostać się do: https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.serviceruntime.roleenvironmentchange.aspx

który jest typem wysłany do zmienionych przypadku zmian w ogóle.

Konkretnie tutaj jest aktualizacja wartości konfiguracja: https://msdn.microsoft.com/en-us/library/azure/microsoft.windowsazure.serviceruntime.roleenvironmentconfigurationsettingchange.aspx

ta zawiera ustawienia, które zostały zmienione. Zauważ, że NIE zawiera on wartości, które uległy zmianie, tylko nazwy ustawień, dzieje się tak dlatego, że zdarzenie Changed resetuje również pamięć podręczną konfiguracji, abyś mógł odczytać ją ponownie, ponieważ nastąpiły zmiany.

+0

To nie odpowiada na pytanie, czy 'RoleEnvironment.GetConfigurationSettingValue' buforuje, czy nie. Czy to? – schauhan

-1

nie będzie odczytywanie konfiguracji za każdym razem żądania wartość. Wartości konfiguracyjne zostaną odświeżone na zdarzeniach RoleEnvironment.Changed.

+0

Proszę wyjaśnić, czy to również zapisuje pamięć podręczną lub adres URL z Microsoft, jak mogę Ci zaufać? –

+1

Właściwie to jest bardzo podstawowe budowanie systemów ładowanych i mogę się założyć, że raczej inteligentny kod dla Azure :) Nie znalazłem kompletnego dowodu, ale tutaj są [źródła java dla lazuru sdk] (http://grepcode.com/ file/repo1.maven.org/maven2/com.microsoft.windowsazure/microsoft-windowsazure-api/0.1.0/com/microsoft/windowsazure/serviceruntime/RoleEnvironment.java # RoleEnvironment.0currentEnvironmentData) i zmienne są buforowane. Kod .net powinien być podobny. – unconnected

+0

I Decompiled dll, który wykonuje tę pracę, ale nie mógł dowiedzieć się, co mnie interesowało. Myślę, że programiści z Azure też nie popełniliby takiego błędu, ale w przypadku aplikacji produkcyjnej, podwójne sprawdzenie nigdy nie zaszkodzi nikomu. –

Powiązane problemy