Pracuję nad implementacją niezawodnego interfejsu Azure Service Fabric Reliable Actor. Dowolny pomysł/link gdzie mogę zapisać wartość konfiguracji (np. Ciąg połączenia DB) i jak uzyskać dostęp do tego w kodzie.Gdzie przechowywać wartości konfiguracyjne w aplikacji usługi Azure Service Fabric
Odpowiedz
Aplikacja Service Fabric składa się z pakietu kodu, pakietu konfiguracyjnego i danych (https://azure.microsoft.com/en-gb/documentation/articles/service-fabric-application-model/).
Możesz użyć pakietu konfiguracyjnego do przechowywania i pobierania dowolnych par klucz-wartość, których potrzebujesz, np. ciąg połączenia. Aby uzyskać więcej informacji, zapoznaj się z artykułem https://azure.microsoft.com/en-us/documentation/articles/service-fabric-manage-multiple-environment-app-configuration/.
Można dodać wiele plików ApplicationParameters. Po prostu skopiuj i wklej to samo z Cloud.Xml i używaj do wielu konfiguracji środowiska.
kroki, aby dokonać niezbędnych zmian
Wartości podane w settings.xml muszą być zastępowane w ApplicationManifest.xml gdy importuje ServiceManifest.xml .Below jest kod wspierając nadrzędne zmiany dodać je w pliku ApplicationManifest.xml.
a) Dodaje się pierwszą wartość domyślna parametru
<Parameters> <Parameter Name="StatelessService1_InstanceCount" DefaultValue="-1" /> <!-- Default Value is set to Point to Dev Database --> <Parameter Name="DatabaseString"DefaultValue="Server=someserver.database.windows.net\;Database=DbDev;user id=[userid];password=[Password];Trusted_Connection=false;" /> </Parameters>
b) następnie zastąpić go w ServiceManifestImport
<ServiceManifestImport> <ServiceManifestRef ServiceManifestName="StatelessServicePkg" ServiceManifestVersion="1.0.0" /> <ConfigOverrides> <ConfigOverride Name="Config"> <Settings> <Section Name="DatabaseConnections"> <Parameter Name="DbString" Value="[DatabaseString]" /> </Section> </Settings> </ConfigOverride> </ConfigOverrides> </ServiceManifestImport>
Powyższe zmiany kod zastąpić następujące kod settings.xml
<Section Name="DatabaseConnections"> <Parameter Name="DbString" Value="Server=someserver.database.windows.net\;Database=DbDev;user id=[userid];password=[Password];Trusted_Connection=false;" /> </Section>
Łącznie, gdy aplikacja zostanie wdrożona yed wartości w ApplicationParameter DevParam.xml lub QaParam.xml lub ProdParam.xml przekroczą wszystkie wartości ustawień.
<Parameters> <Parameter Name="StatelessService1_InstanceCount" Value="-1" /> <Parameter Name="DatabaseString" Value="Server=someserverqa.database.windows.net\;Database=DbQA;user id=[userid];password=[Password];Trusted_Connection=false;" /> </Parameters>
W uzupełnieniu do powyższej informacji, ważne jest, aby wiedzieć, w jakiej kolejności ASF nadpisuje ustawienie aplikacji:
usługi Fabric zawsze wyboru pliku parametrów aplikacji pierwszy (jeśli określono), następnie manifest aplikacji, a na końcu pakiet konfiguracyjny (source)
Aby uzyskać więcej informacji: http://www.binaryradix.com/2016/10/reading-from-configuration-within-azure.html
Dzięki za link, zapisałem wartość w pliku Settings.xml. ale jak odzyskać tę wartość w kodzie w czasie wykonywania? Nie znalazłem żadnego przykładu na ten temat. –
Ach, dobry punkt! Musisz użyć CodePackageActivationConext. Spójrz na tę odpowiedź SO http://stackoverflow.com/questions/33928204/where-do-you-set-and-access-run-time-configuration-parameters-per-environment-fo – charisk
Działa jak urok. Ale jeszcze jedno pytanie. Ponieważ usługa ServiceInitializationParameters jest dostępna tylko w ramach aktora/usługi, w jaki sposób mogę uzyskać do niej dostęp w innych klasach? Nie mogę utworzyć zmiennej statycznej w Actor/Service, ponieważ jest to obiekt niestatyczny. i jeśli utworzę normalną właściwość, wtedy muszę utworzyć instancję klasy Aktor/Usługa w innych klasach, kiedy potrzebuję tej wartości. –