Gli storage di Windows Azure (table, queue, e blob) sono pensati per scalare e supportare grossi carichi di lavoro e hanno la caratteristica principale di poter essere consumati tramite chiamate REST, cioè interamente con chiamate HTTP. Questo li rende facili da usare con qualsiasi tecnologia o piattaforma tra cui anche Silverlight che, grazie alle classi WebClient e WebRequest, permette di effettuare upload, query a tabelle, popolare o smaltire code.
Nello sfruttare Windows Azure si incappa però in un problema tipico di Silverlight: l'accesso cross domain. Gli storage infatti risiedono solitamente sul dominio [nome].blob.core.windows.net mentre l'applicazione internet, o più in generale dove risiede lo XAP risiede su un dominio internet diverso. Questo significa che le chiamate viaggiano tra due dominio diversi e il client Silverlight cercherà i file clientaccesspolicy.xml o crossdomain.xml, come richiesto dalle specifiche per verificare se il chiamante può effettuare l'operazione.
Purtroppo i blob sono raggruppati in container, oggetti paragonabili a macro cartelle e quindi apparentemente non è possibile caricare file alla radice del dominio. Fortunatamente esiste un container speciale, di nome $root che rappresenta la radice del dominio. Nel codice seguente si sfruttano quindi le API managed da utilizzare in una console application per poter caricare il file clientaccesspolicy.xml.
// Creo il client REST CloudStorageAccount account = CloudStorageAccount.Parse("DefaultEndpointsProtocol=http;AccountName=test;AccountKey=key"); CloudBlobClient client = account.CreateCloudBlobClient(); // Creo il container $root CloudBlobContainer container = client.GetContainerReference("$root"); container.CreateIfNotExist(); // Imposto i permessi container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob }); // Carico il file xml CloudBlockBlob page = container.GetBlockBlobReference("clientaccesspolicy.xml"); page.UploadFile(@"c:\temp\clientaccesspolicy.xml");
Nello snippet precedente si carica il file e, di particolare importanza, si rende pubblico l'accesso in sola lettura ai blob tramite il metodo SetPermissions, consentendo a chiunque di poter scaricare il file. Per concludere, il container $root purtroppo non è disponibile.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare Container Queries nominali
Gestire il routing HTTP in Azure Container App
Testare l'invio dei messaggi con Event Hubs Data Explorer
Utilizzare Locust con Azure Load Testing
Gestione degli eventi nei Web component HTML
Path addizionali per gli asset in ASP.NET Core MVC
Utilizzare DeepSeek R1 con Azure AI
Introduzione ai web component HTML
Gestire codice JavaScript con code splitting e lazy loading
Supportare la crittografia di ASP.NET Core con Azure Container App
I più letti di oggi
- Niente .NET sui server: siamo Microsoft
- Una funzione per validare un indirizzo e-mail
- Impersonation di utente per l'esecuzione di codice in una pagina ASP.NET
- Tutorial ASP.NET 4.0
- Tutorial Entity Framework 5.0
- Solo 5 minuti all'inizio della keynote!! http://aspitalia.com/build-win8 #BldWin
- Windows Embedded Standard 8 disponibile in CTP. stessa base di #win8, componentizzabile, con supporto a #metro: http://aspitalia.com/6u
- disponibile il nuovo #adsdk per #win8. doc su https://aspit.co/ad3 donwload diretto da https://aspit.co/ad4
- #MIX10: Windows Phone - demo Hush Hush, un diario con interfaccia completamente personalizzata
- Scott Guthrie on stage: inizia la seconda keynote di //build/ https://aspit.co/build-14 #bldwin