I blob di Windows Azure sono un comodo strumento per depositare file in modo sicuro e soprattutto scalabile. Il loro punto di forza risiede nel fatto che ogni file viene rindondato su più server sia a scopi di backup, sia per permettere il download e l'upload senza limiti di spazio, il tutto a ottime prestazioni. Può essere usato in situazioni in cui pochi scrivono (un engine o ruolo) e molti leggono, ma anche per quelle situazioni in cui molti scrivono e leggono. E' proprio nella fase di scrittura che, in alcune circostanze, abbiamo la necessità di evitare che più attori possano contemporaneamente scrivere su uno stesso file.
Per questo scopo viene in aiuto la possibilità di lease, cioè la possibilità che abbiamo di bloccare un risorsa e rilasciarla solo al termine dell'operazione su di essa. Data la natura scalabile di Windows Azure, la chiamata per ottenre il blocco, restituisce un ID, da presentare ad ogni richiesta, che ci dà l'autorizzazione alla modifica di quel file, mentre per chi non presenta questo ID, sarà consentito solo la lettura. Fare questo con le API di .NET è abbastanza semplice e possiamo vedere un esempio nello snippet seguente.
var account = CloudStorageAccount.DevelopmentStorageAccount; // Ottengo il riferimento al file $root/test.txt var client = account.CreateCloudBlobClient(); var container = client.GetRootContainerReference(); var blob = container.GetBlockBlobReference("test.txt"); // Acquisisco il lease (ricevo un errore se già acquisito) var leaseId = blob.AcquireLease(TimeSpan.FromSeconds(60), null); // Preparo l'oggetto da passare ad ogni chiamata per consentire la scrittura var ac = new AccessCondition { LeaseId = leaseId }; blob.UploadFromStream(new MemoryStream(), ac); // Rilascio il lease blob.ReleaseLease(ac); // Rinnovo il lease // blob.RenewLease // Interrompo il lease, ma finché non scade nessun altro può acquisirlo // blob.BreakLease
Molto importante è il TimeSpan che specifica per quanti secondi ottenere il lease. E' un parametro opzionale, ma che suggeriamo di utilizzare sempre. In caso di mancato rilascio, infatti, il timeout garantisce che dopo un certo periodo di tempo il lease venga rilasciato in automatico dal sistema. Nel codice precedente vengono indicati anche altri metodi rispettivamente per rinnovare il lease e per rompere il lease, cioè mantenere bloccato il file, ma senza la possibilità di continuare a scrivere fino allo scadere del timeout (tipicamente da chiamare in alternativa al rilascio).
Link di approfondimento
http://msdn.microsoft.com/en-us/library/windowsazure/ee691972.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Generare una User Delegation SAS in .NET per Azure Blob Storage
Gestire il colore CSS con HWB
Utilizzare Copilot con Azure Cosmos DB
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Generare velocemente pagine CRUD in Blazor con QuickGrid
Gestione file Javascript in Blazor con .NET 9
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Utilizzare l nesting nativo dei CSS