Le Microsoft Azure Web App, così come le API e Mobile App, sono un servizio che ci permette di ospitare il nostro sito internet all'interno di un hosting IIS completamente gestito. Sia che utilizziamo Web Deploy o FTP, lo spazio che ci viene messo a disposizione è parzialmente raggiungibile da IIS attraverso la cartella wwwroot. Le altre cartelle sono riservate a file di log e ai web job, ma ci è consentito anche leggere e scrivere in tutto lo spazio a noi assegnato, per esempio per depositare nostri file (fino ad 1GB per i piani gratuiti).
Per farlo dobbiamo prima di tutto conoscere la struttura delle cartelle, visibile qui https://github.com/projectkudu/kudu/wiki/File-structure-on-azure. Poiché le API di IO necessitano sempre di un percorso assoluto (per evitare di cercare in system32) è opportuno risolvere sempre in modo corretto il percorso. A questo scopo vengono in aiuto le variabili d'ambiente, visibili a questo indirizzo https://github.com/projectkudu/kudu/wiki/Azure-runtime-environment. La più importante è sicuramente la variabile %HOME% che ci indica il percorso completo al livello radice.
In questo script proponiamo due facili funzioni che ci permettono di risolvere il percorso. Esse sono Environment.GetEnvironmentVariable e Environment.ExpandEnvironmentVariables rispettivamente per risolvere una variabile o convertire un percorso risolvendo le variabili che contiene.
var p = Path.Combine(Environment.GetEnvironmentVariable("HOME"), "miaCartella"); var p2 = Environment.ExpandEnvironmentVariables(@"%HOME%\miaCartella"); // p e p2 sono d:\home\miaCartella
In questo modo i percorsi che utilizziamo sono sicuri e al riparo da problemi in caso di cambiamenti da parte di Microsoft. Ricordiamo infine che il file system di cui la Web App dispone, è condiviso tra le molteplici istanze che possiamo avere ed è perciò importante prestare attenzione ad eventuali conflitti.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Referenziare un @layer più alto in CSS
Utilizzare i primary constructor in C#
Utilizzare gRPC su App Service di Azure
Utilizzare database e servizi con gli add-on di Container App
Generare la software bill of material (SBOM) in GitHub
Sostituire la GitHub Action di login su private registry
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Installare le Web App site extension tramite una pipeline di Azure DevOps
Disabilitare automaticamente un workflow di GitHub (parte 2)
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Evitare il flickering dei componenti nel prerender di Blazor 8