Accedere a dati locali e remoti in applicazioni ClickOnce

La maggior parte delle applicazioni usa o produce dati. ClickOnce offre un'ampia gamma di opzioni per la lettura e la scrittura di dati, sia in locale che in remoto.

Dati locali

Con ClickOnce è possibile caricare e archiviare i dati in locale usando uno dei metodi seguenti:

  • Directory dei dati di ClickOnce

  • Spazio di memorizzazione isolato

  • Altri file locali

Directory dei dati di ClickOnce

Ogni applicazione ClickOnce installata in un computer locale dispone di una directory di dati archiviata nella cartella Documenti e Impostazioni dell'utente. Qualsiasi file incluso in un'applicazione ClickOnce e contrassegnato come file "dati" viene copiato in questa directory quando viene installata un'applicazione. I file di dati possono essere di qualsiasi tipo. Quelli usati più frequentemente sono i file di testo, i file XML e i file di database, ad esempio i file mdb di Microsoft Access.

La directory dei dati è destinata a dati gestiti dall'applicazione, ossia dati archiviati e gestiti in modo esplicito dall'applicazione. Tutti i file statici senza dipendenze non contrassegnati come "data" nel manifesto dell'applicazione risiedono invece nella directory delle applicazioni. In questa directory si trovano i file eseguibili dell'applicazione (exe) e gli assembly.

Nota

Quando un'applicazione ClickOnce viene disinstallata, viene rimossa anche la relativa directory di dati. Non usare mai la directory dei dati per archiviare dati gestiti dall'utente finale, ad esempio i documenti.

Contrassegnare i file di dati in una distribuzione ClickOnce

Per inserire un file esistente all'interno della directory dati, è necessario contrassegnare il file esistente come file di dati nel file manifesto dell'applicazione ClickOnce dell'applicazione. Per altre informazioni, vedere Procedura: Includere un file di dati in un'applicazione ClickOnce.

Leggere e scrivere nella directory dei dati

Per leggere dalla directory dati è necessario che l'applicazione ClickOnce richieda l'autorizzazione lettura; Analogamente, la scrittura nella directory richiede l'autorizzazione di scrittura. L'applicazione ottiene automaticamente queste autorizzazioni se è configurata per l'esecuzione con attendibilità totale. Per altre informazioni sull'elevazione delle autorizzazioni per l'applicazione tramite l'elevazione delle autorizzazioni o la distribuzione di applicazioni attendibili, vedere Proteggere le applicazioni ClickOnce.

Nota

Se l'organizzazione non usa la distribuzione di applicazioni attendibili e ha disattivato l'elevazione delle autorizzazioni, l'asserzione delle autorizzazioni non riesce.

Una volta ottenute queste autorizzazioni, l'applicazione può accedere alla directory dei dati usando le chiamate al metodo nelle classi contenute in System.IO. È possibile ottenere il percorso della directory dati all'interno di un'applicazione ClickOnce Windows Form usando la DataDirectory proprietà definita nella CurrentDeployment proprietà di ApplicationDeployment. È il modo consigliato più appropriato per l'accesso ai dati. Il seguente esempio di codice mostra la procedura per un file di testo denominato CSV.txt incluso nella distribuzione come file di dati.

Nota

La ApplicationDeployment classe e le API nello System.Deployment.Application spazio dei nomi non sono supportate in .NET Core e .NET 5 e versioni successive. In .NET 7 è supportato un nuovo metodo di accesso alle proprietà di distribuzione dell'applicazione. Per altre informazioni, vedere Accedere alle proprietà di distribuzione ClickOnce in .NET. .NET 7 non supporta l'equivalente dei metodi ApplicationDeployment.

if (ApplicationDeployment.IsNetworkDeployed)
{
    try
    {
        using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
        {
            MessageBox.Show(sr.ReadToEnd());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Could not read file. Error message: " + ex.Message);
    }
}

Per altre informazioni su come contrassegnare i file nella distribuzione come file di dati, vedere Procedura: Includere un file di dati in un'applicazione ClickOnce.

È anche possibile ottenere il percorso della directory dei dati usando le variabili rilevanti nella classe Application , ad esempio LocalUserAppDataPath.

La manipolazione di altri tipi di file potrebbe richiedere autorizzazioni aggiuntive. Ad esempio, se si vuole usare un file di database di Access (.mdb), l'applicazione deve asserire l'attendibilità totale per usare le classi xref:System.Data> pertinenti<.

Directory dei dati e versioni dell'applicazione

Ogni versione dell'applicazione ha la propria directory dei dati, isolata rispetto alle altre versioni. ClickOnce crea questa directory indipendentemente dal fatto che nella distribuzione siano inclusi file di dati in modo che l'applicazione disponga di un percorso per creare nuovi file di dati in fase di esecuzione. Quando viene installata una nuova versione di un'applicazione, ClickOnce copia tutti i file di dati esistenti dalla directory dei dati della versione precedente nella directory dei dati della nuova versione, indipendentemente dal fatto che siano stati inclusi nella distribuzione originale o creati dall'applicazione.

ClickOnce sostituirà la versione precedente del file con la versione più recente del server se un file di dati ha un valore hash diverso nella versione precedente dell'applicazione, come nella nuova versione. Inoltre, se la versione precedente dell'applicazione ha creato un nuovo file con lo stesso nome di un file incluso nella distribuzione della nuova versione, ClickOnce sovrascriverà il file della versione precedente con il nuovo file. In entrambi i casi, i file precedenti verranno inclusi in una sottodirectory all'interno della directory dei dati denominata .pre, in modo che l'applicazione possa ancora accedere ai dati precedenti per scopi di migrazione.

Se è necessaria una migrazione più granulare dei dati, è possibile usare l'API di distribuzione ClickOnce per eseguire la migrazione personalizzata dalla directory dei dati precedente alla nuova directory dati. Sarà necessario verificare la disponibilità di un download usando IsFirstRun, scaricare l'aggiornamento con Update o UpdateAsynced eseguire il processo di migrazione dei dati personalizzato autonomamente dopo il completamento dell'aggiornamento.

Spazio di memorizzazione isolato

Lo spazio di memorizzazione isolato fornisce un'API per creare e accedere ai file usando una semplice API. Il percorso effettivo dei file archiviati è nascosto sia allo sviluppatore che all'utente.

La Archiviazione isolata funziona in tutte le versioni di .NET Framework. Lo spazio di memorizzazione isolato funziona anche in applicazioni parzialmente attendibili senza necessità di autorizzazioni aggiuntive. Usare lo spazio di memorizzazione isolato se l'applicazione deve essere eseguita con attendibilità parziale, ma deve gestire dati specifici dell'applicazione.

Per altre informazioni, vedere Spazio di memorizzazione isolato.

Altri file locali

Se l'applicazione deve usare o salvare dati dell'utente finale come report, immagini, musica e così via, l'applicazione richiederà che FileIOPermission sia in grado di leggere e scrivere i dati nel file system locale.

Dati remoti

A un certo punto, l'applicazione dovrà probabilmente recuperare informazioni da un sito Web remoto, ad esempio dati del cliente o informazioni di mercato. Questa sezione descrive le tecniche più comuni per il recupero dei dati remoti.

Accedere ai file con HTTP

È possibile accedere ai dati da un server Web usando la classe WebClient o HttpWebRequest nello spazio dei nomi System.Net . I dati possono essere file statici o applicazioni ASP.NET che restituiscono testo non elaborato o dati XML. Se i dati sono in formato XML, il modo più veloce per recuperarli prevede l'uso della classe XmlDocument , il cui metodo Load acquisisce un URL come argomento. Per un esempio, vedere Leggere un documento XML nel DOM.

È necessario tenere presenti i problemi legati alla sicurezza quando l'applicazione accede ai dati remoti tramite HTTP. Per impostazione predefinita, l'accesso dell'applicazione ClickOnce alle risorse di rete può essere limitato, a seconda della modalità di distribuzione dell'applicazione. Queste restrizioni vengono applicate per evitare che programmi dannosi accedano ai dati remoti riservati o che usino il computer di un utente per attaccare gli altri computer della rete.

La tabella seguente elenca le strategie di distribuzione che è possibile usare e le relative autorizzazioni Web predefinite.

Tipo di distribuzione Autorizzazioni di rete predefinite
Installazione Web Può accedere solo al server Web da cui è stata installata l'applicazione
Installazione da condivisione file Non può accedere a tutti i server Web
Installazione da CD-ROM Può accedere a qualsiasi server Web

Se l'applicazione ClickOnce non può accedere a un server Web a causa di restrizioni di sicurezza, l'applicazione deve asserire WebPermission per tale sito Web. Per altre informazioni sull'aumento delle autorizzazioni di sicurezza per un'applicazione ClickOnce, vedere Proteggere le applicazioni ClickOnce.

Accedere ai dati tramite un servizio Web XML

Se si espongono i dati sotto forma di servizio Web XML, è possibile accedervi usando un proxy del servizio Web XML. Il proxy è una classe .NET Framework creata usando Visual Studio. Le operazioni del servizio Web XML, ad esempio il recupero dei clienti, l'emissione di ordini e così via, vengono esposte come metodi nel proxy. I servizi Web risultano più semplici da usare rispetto al testo non elaborato o ai file XML.

Se il servizio Web XML funziona tramite HTTP, sarà associato alle stesse restrizioni di sicurezza delle classi WebClient e HttpWebRequest .

Accedere direttamente a un database

È possibile usare le classi nello spazio dei nomi System.Data per stabilire connessioni dirette a un server di database come SQL Server in rete, ma è necessario tenere presente i problemi legati alla sicurezza. A differenza delle richieste HTTP, le richieste di connessione al database sono sempre vietate per impostazione predefinita con attendibilità parziale; tale autorizzazione sarà disponibile per impostazione predefinita solo se si installa l'applicazione ClickOnce da un CD-ROM. In questo modo, l'applicazione ottiene l'attendibilità totale. Per abilitare l'accesso a uno specifico database di SQL Server, l'applicazione deve richiedere SqlClientPermission a tale database. Per abilitare l'accesso a un database diverso da SQL Server, deve richiedere OleDbPermission.

Nella maggior parte dei casi non sarà necessario accedere direttamente al database, ma sarà possibile accedervi tramite un'applicazione server Web scritta in ASP.NET o un servizio Web XML. L'accesso al database in questo modo è spesso il metodo migliore se l'applicazione ClickOnce viene distribuita da un server Web. È possibile accedere al server con un'attendibilità parziale senza elevare le autorizzazioni dell'applicazione.