Articoli con tag Configuration
Azure Storage Configuration Setting
Come spiegato nel mio precedente post, il luogo migliore dove posizionare i setting applicativi è sicuramente ServiceConfiguration.cscfg.
Lavorando con le classi di storage, si può notare come la classe CloudStorageAccount abbia il metodo statico FromConfigurationSetting.
Ci si potrebbe aspettare che esso ricavi la connection string dai file ServiceDefinition/ServiceConfiguration, ma così non è. Come suggerisce MSDN, prima di chiamare questo metodo è necessario chiamare il metodo SetConfigurationServicePublisher. Tale metodo è responsabile di definire le modalità con cui recuperare i setting.
In ambiente could è quindi prassi scrivere:
CloudStorageAccount.SetConfigurationSettingPublisher( (key, setter) => { setter(RoleEnvironment.GetConfigurationSettingValue(key)); } );
In pratica si sta dicendo che, data una chiave, viene impostato nel dizionario key-value il valore che si recupera dalle setting presenti in ServiceConfiguration.
Perchè tutto questo? semplicemente perchè le api di CloudStorage non vengono eseguite esclusivamente da role hostati in windows azure, ma possono essere utilizzate anche in semplici applicazioni desktop o web.
In quest’ultimo caso è possibile recuperare le setting da app.config o web.config (o da database, da isolated storage, da xml…):
CloudStorageAccount.SetConfigurationSettingPublisher( (key, setter) => { setter(ConfigurationManager.AppSettings[key]); } );
Azure configuration settings
I role di Windows Azure possono essere considerati come delle vere e proprie applicazioni in grado di essere hostate nel cloud. Essendo applicazioni, è possibile definire i loro setting nei rispettivi file di configurazione, ovvero app.config per i worker role e web.config per i webrole.
Se da un lato questo approccio ha il vantaggio di slegarsi dal mondo cloud e permette un revert veloce verso una applicazione on-premise, esso comporta un considerevole svantaggio, ovvero i valori non possono essere modificati a runtime.
Mentre infatti è possibile modificare on-the-fly il web.config di una applicazione web in quanto IIS si accorge della modifica del file e fa riavviare la web application, questo non è possibile per un role poichè il file di configurazione è incluso nel package di deploy. Sarebbe quindi necessario rieseguire il deploy di un altro package (scomodo).
L’unico modo per modificare le app settings senza sospendere il role è di agire nei file di configurationi ServiceDefinition.csdef e ServiceConfiguration.cscfg.
A differenza di un normale web.config abbiamo una limitazione: non è possibile aggiungere o eliminare una coppia chiave-valore, ma è concesso solo cambiarne il valore.
Questo è dovuto al fatto che tutte le chiavi siano presenti nel ServiceDefinition.csdef, file incluso nel package, il quale configura l’AppFabric nel digli “ServiceConfiguration.cscfg contiene questi app.settting, tieni d’occhio solo questi”.
Per leggere questi valori è necessario passare dalla classe RoleEnvironment, ovvero:
string value = RoleEnvironment.GetConfigurationSettingValue("settingKey");