Condividi tramite


Accesso a dati locali e remoti in applicazioni ClickOnce

Nella maggior parte delle applicazioni vengono utilizzati o generati 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 dati in locale in uno dei seguenti modi:

  • Directory Dati ClickOnce

  • Archiviazione isolata

  • Altri file locali

Directory Dati ClickOnce

Per ogni applicazione ClickOnce installata in un computer locale esiste una directory Dati all'interno della cartella Documents and Settings dell'utente. I file inclusi in un'applicazione ClickOnce e contrassegnati come file di dati vengono copiati in questa directory al momento dell'installazione dell'applicazione. I file di dati possono essere di qualsiasi tipo. Tra i più comuni sono inclusi i file di testo, i file XML e i file di database, ad esempio i file mdb di Microsoft Access.

La directory dati è destinata ai dati esplicitamente archiviati e gestiti da un'applicazione. Tutti i file statici non di dipendenza che non sono contrassegnati come file di dati nel manifesto dell'applicazione si trovano invece nella directory dell'applicazione, ossia la directory in cui sono presenti i file eseguibili (exe) e gli assembly dell'applicazione.

Nota

Quando un'applicazione ClickOnce viene disinstallata, anche la relativa directory Dati viene rimossa. Non utilizzare mai questa directory per archiviare dati gestiti dall'utente finale, ad esempio documenti.

Impostazione dei file di dati in una distribuzione ClickOnce

Per inserire un file esistente nella directory Dati è necessario contrassegnarlo come file di dati nel file manifesto dell'applicazione ClickOnce. Per ulteriori informazioni, vedere Procedura: includere un file di dati in un'applicazione ClickOnce.

Lettura e scrittura nella directory Dati

Per le operazioni di lettura dalla directory Dati è necessario che l'applicazione ClickOnce richieda l'autorizzazione di lettura. Analogamente, per le operazioni di scrittura deve essere richiesta l'autorizzazione di scrittura. L'applicazione disporrà automaticamente di queste autorizzazioni se è configurata per l'esecuzione con il livello di attendibilità totale. Per ulteriori informazioni su come aumentare le autorizzazioni per l'applicazione mediante l'elevazione delle autorizzazioni o la distribuzione di applicazioni attendibili, vedere Protezione di applicazioni ClickOnce.

Nota

Se nella propria organizzazione non viene utilizzata la distribuzione di applicazioni attendibili e l'elevazione delle autorizzazioni è stata disattivata, la richiesta delle autorizzazioni non riuscirà.

Quando l'applicazione dispone di queste autorizzazioni, l'accesso alla directory Dati può essere effettuato mediante chiamate a metodi sulle classi incluse nello spazio dei nomi System.IO. È possibile ottenere il percorso della directory dati di un'applicazione ClickOnce Windows Form utilizzando la proprietà DataDirectory definita nella proprietà CurrentDeployment della classe ApplicationDeployment. Questo è il modo più appropriato e consigliato per accedere ai dati. Nell'esempio di codice riportato di seguito viene descritto come effettuare questa operazione per un file di testo denominato CSV.txt che è stato incluso nella distribuzione come file di dati.

If (ApplicationDeployment.IsNetworkDeployed) Then
    Dim SR As StreamReader = Nothing

    Try
        SR = New StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory & "\CSV.txt")
        MessageBox.Show(SR.ReadToEnd())
    Catch Ex As Exception
        MessageBox.Show("Could not read file.")
    Finally
        SR.Close()
    End Try
End If
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 ulteriori informazioni su come contrassegnare i file della distribuzione come file di dati, vedere Procedura: includere un file di dati in un'applicazione ClickOnce.

Il percorso della directory Dati può essere ottenuto anche utilizzando le variabili appropriate nella classe Application, ad esempio LocalUserAppDataPath.

Per la modifica di altri tipi di file possono essere necessarie autorizzazioni aggiuntive. Se ad esempio si desidera utilizzare un file di database di Access (mdb), l'applicazione dovrà richiedere l'attendibilità totale per utilizzare le classi System.Data appropriate.

Directory Dati e versioni delle applicazioni

Ciascuna versione di un'applicazione dispone della propria directory Dati, separata da quella delle altre versioni ClickOnce crea questa directory indipendentemente dalla presenza di file di dati nella distribuzione, affinché sia disponibile un'area per la creazione di 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, inclusi nella distribuzione originale o creati dall'applicazione, dalla directory Dati della versione precedente in quella della nuova versione.

Se un file di dati nella versione precedente dell'applicazione ha un valore hash differente rispetto alla nuova versione, ClickOnce sostituirà la versione precedente del file con quella più recente sul server. Inoltre, se nella versione precedente dell'applicazione era stato 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 quello nuovo. In entrambi i casi, i file delle versioni precedenti verranno inclusi nella sottodirectory .pre all'interno della directory Dati, in modo che l'applicazione possa comunque accedere ai dati precedenti per scopi di migrazione.

Se è necessario eseguire una migrazione dei dati più controllata, è possibile utilizzare l'API della distribuzione ClickOnce per eseguire una migrazione personalizzata dalla directory Dati precedente a quella nuova. Sarà sufficiente verificare la disponibilità di un download mediante IsFirstRun, scaricare l'aggiornamento utilizzando Update o UpdateAsync ed eseguire l'attività di migrazione dei dati nella propria directory al termine dell'aggiornamento.

Archiviazione isolata

La funzionalità di archiviazione isolata consente la creazione e l'accesso ai file mediante l'utilizzo di una semplice API. Il percorso effettivo dei file archiviati viene nascosto sia allo sviluppatore che all'utente.

L'archiviazione isolata può essere utilizzata in tutte le versioni di .NET Framework e anche nelle applicazioni parzialmente attendibili, senza che siano richieste autorizzazioni aggiuntive. Si consiglia di utilizzare l'archiviazione isolata se l'applicazione deve essere eseguita con un livello di attendibilità parziale, ma deve gestire dati specifici.

Per ulteriori informazioni, vedere Spazio di memorizzazione isolato.

Altri file locali

Se l'applicazione deve modificare o salvare dati dell'utente finale, quali report, immagini, musica e così via, richiederà l'autorizzazione FileIOPermission per la lettura e la scrittura di dati nel file system locale.

Dati remoti

È possibile che l'applicazione debba recuperare informazioni da un sito Web remoto, ad esempio dati relativi ai clienti o informazioni di mercato. In questa sezione vengono illustrate le tecniche più comuni per il recupero di dati remoti.

Accesso ai file tramite HTTP

È possibile accedere ai dati su un server Web utilizzando la classe WebClient o HttpWebRequest dello spazio dei nomi System.Net. I dati possono essere costituiti sia da file statici che da applicazioni ASP.NET che restituiscono testo non elaborato o dati XML. Il modo più rapido per recuperare dati in formato XML consiste nell'utilizzare la classe XmlDocument, il cui metodo Load accetta un URL come argomento. Per un esempio, vedere Lettura di un documento XML nel DOM.

Quando si accede a dati remoti tramite HTTP è necessario tenere presenti alcune considerazioni relative alla sicurezza. 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 hanno lo scopo di impedire a programmi dannosi di accedere a dati remoti riservati o di utilizzare il computer di un utente per attaccare altri computer nella rete.

Nella tabella riportata di seguito sono elencate le possibili strategie di distribuzione e le relative autorizzazioni Web predefinite.

Tipo di distribuzione

Autorizzazioni di rete predefinite

Installazione Web

L'applicazione può accedere solo al server Web dal quale è stata installata.

Installazione da condivisione file

L'applicazione non può accedere ad alcun server Web.

Installazione da CD

L'applicazione può accedere a qualsiasi server Web.

Se l'applicazione ClickOnce non può accedere a un server Web a causa di restrizioni di sicurezza, dovrà richiedere l'autorizzazione WebPermission per il sito Web in questione. Per ulteriori informazioni su come aumentare le autorizzazioni di sicurezza per un'applicazione ClickOnce, vedere Protezione di applicazioni ClickOnce.

Accesso ai dati mediante un servizio Web XML

Se si espongono i dati come servizio Web XML, sarà possibile accedere ai dati utilizzando un proxy di servizio Web XML, ovvero una classe di .NET Framework creata mediante Visual Studio. Le operazioni del servizio Web XML, ad esempio la ricerca di clienti, l'invio di ordini e così via, vengono esposte come metodi sul proxy. Grazie a questa caratteristica, i servizi Web risultano più semplici da utilizzare rispetto al testo non elaborato o ai file XML.

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

Per eseguire questa attività è anche possibile utilizzare Visual Studio. Per ulteriori informazioni, vedere Procedura: aggiungere e rimuovere riferimenti Web e Procedura: aggiungere e rimuovere riferimenti Web e Procedura: aggiungere e rimuovere riferimenti Web.  

Accesso diretto a un database

È possibile utilizzare le classi incluse nello spazio dei nomi System.Data per stabilire connessioni dirette con un server database sulla rete, ad esempio SQL Server, ma anche in questo caso è necessario tenere presenti le problematiche relative alla sicurezza. Diversamente dalle richieste HTTP, quelle di connessione al database sono sempre vietate per impostazione predefinita quando è impostata l'attendibilità parziale. Le autorizzazioni appropriate sono disponibili per impostazione predefinita solo se l'applicazione ClickOnce viene installata da un CD, poiché con questo tipo di installazione viene concessa l'attendibilità totale. Per l'accesso a uno specifico database di SQL Server, l'applicazione deve richiedere l'autorizzazione SqlClientPermission, mentre per l'accesso a un database diverso da SQL Server, deve richiedere l'autorizzazione OleDbPermission.

Nella maggior parte dei casi, non è necessario accedere al database direttamente, ma è sufficiente utilizzare un'applicazione server Web scritta in ASP.NET o un servizio Web XML. Questa modalità di accesso al database rappresenta in genere la soluzione migliore se l'applicazione ClickOnce viene distribuita da un server Web. È possibile accedere al server con un livello di attendibilità parziale, senza che sia necessario elevare le autorizzazioni dell'applicazione.

Vedere anche

Attività

Procedura: includere un file di dati in un'applicazione ClickOnce