Nello script #201 si è visto come è possibile usare e manipolare facilmente le configurazioni in Windows Azure. Un uso tipico di questo genere di informazioni avviene sui servizi di Table, Blob e Queue, che permettono di memorizzare dati in forma tabellare, memorizzare file e avere una coda di messaggi.
Le informazioni da configurare, per questo genere di servizio sono molteplici: l'account name, l'account key e i rispettivi endpoint per raggiungere i servizi. Le classi CloudBlobClient, CloudTableClient e CloudQueueClient vogliono infatti l'endpoint del servizio (un URI) e le credenziali di accesso.
Per facilitare la creazione di questi oggetti viene in aiuto la classe CloudStorageAccount che con il metodo statico FromConfigurationSetting permette di ottenere un'istanza di CloudStorageAccount data la chiave della configurazione. Di conseguenza per accedere ad una tabella bastano poche righe.
// Leggo la stringa di connessione CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); // Creo il client blob CloudTableClient client = account.CreateCloudTableClient();
Il valore della chiave è una stringa di connessione che in modo simile ai database contiene chiavi separate dal punto e virgola. Un esempio di stringa di connessione è:
DefaultEndpointsProtocol=http;AccountName=<accountName>;AccountKey=<accountKey>;
La configurazione di un account è possibile anche tramite Visual Studio che offre, dopo aver cambiato la tipologia della chiave in Connection String, una finestra di dialogo apposita.
Vi è un ultimo aspetto da considerare, poiché le classi client di Windows Azure sono utilizzabili anche da un ambiente esterno, come in una console application o una normale web application. E' necessario quindi informare la classe CloudStorageAccount come recuperare la stringa di connessione. In una normale applicazione la si può prelevare dal ConfigurationManager piuttosto che da un file XML, mentre in un role si può usare RoleEnvironment.
Per istruire il motore è necessario quindi chiamare il metodo SetConfigurationSettingPublisher, il quale necessita di un delegate che, dato il nome della configurazione, chiami a sua volta una funzione per passare il valore. Nell'esempio seguente si legge il valore con RoleEnvironment per poi richiamare la funzione configSetter. Tale lambda verrà richiamata ogni volta che si ricorre al metodo CloudStorageAccount.FromConfigurationSetting.
CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) => { // Leggo il valore dalla configurazione string value = RoleEnvironment.GetConfigurationSettingValue(configName); // Restituisco il valore al motore configSetter(value); });
Infine, è possibile caricare una stringa di connessione e ottenere un CloudStorageAccount con il metodo statico CloudStorageAccount.Parse.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Migliora la resilienza delle applicazioni con .NET e Azure Container Apps
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Utilizzare il trigger SQL con le Azure Function
Implementare il throttling in ASP.NET Core
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Eseguire attività basate su eventi con Azure Container Jobs
Utilizzare politiche di resiliency con Azure Container App
Potenziare Azure AI Search con la ricerca vettoriale
Utilizzare la libreria Benchmark.NET per misurare le performance
Eseguire operazioni sui blob con Azure Storage Actions
Utilizzare la session affinity con Azure Container Apps
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- Definire stili a livello di libreria in Angular
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)