Accès aux données locales et distantes dans les applications ClickOnce

La plupart des applications consomment ou produisent des données.ClickOnce vous donne diverses options pour la lecture et l'écriture de données, à la fois localement et à distance.

Données locales

Avec ClickOnce, vous pouvez charger et stocker des données localement en utilisant une des méthodes suivantes :

  • ClickOnce Répertoire de données

  • Stockage isolé

  • Autres fichiers locaux

d8saf4wy.collapse_all(fr-fr,VS.110).gifRépertoire de données ClickOnce

Chaque application ClickOnce installée sur un ordinateur local possède un répertoire de données stocké dans le dossier Documents and Settings de l'utilisateur.Tout fichier inclus dans une application ClickOnce et marqué comme un fichier de « données » est copié vers ce répertoire lorsqu'une installation est installée.Les fichiers de données peuvent être de tout type, les plus fréquents étant les fichiers texte, XML et de base de données, par exemple les fichiers .mdb de Microsoft Access.

Le répertoire de données est prévu pour les données gérées par les applications, c'est-à-dire des données que l'application stocke et gère explicitement.Tous les fichiers non dépendants qui ne sont pas marqués comme des « données » dans le manifeste d'application résideront, eux, dans le répertoire d'application.Ce répertoire se trouve à l'emplacement où les fichiers exécutables de l'application (.exe) et les assemblys résident.

[!REMARQUE]

Lorsqu'une application ClickOnce est désinstallée, son répertoire de données est également supprimé.N'utilisez jamais le répertoire de données pour stocker des données gérées par l'utilisateur final, par exemple des documents.

d8saf4wy.collapse_all(fr-fr,VS.110).gifMarquage des fichiers de données dans une distribution ClickOnce

Pour placer un fichier existant dans le répertoire de données, vous devez le marquer comme un fichier de données dans votre fichier manifeste d'application ClickOnce.Pour plus d'informations, consultez Comment : inclure un fichier de données dans une application ClickOnce.

d8saf4wy.collapse_all(fr-fr,VS.110).gifLecture et écriture dans le répertoire de données

Pour lire dans le répertoire des données, votre application ClickOnce doit demander une autorisation en lecture. De la même façon, l'écriture dans le répertoire exige une autorisation en écriture.Votre application bénéficie automatiquement de cette autorisation si elle est configurée pour s'exécuter avec un niveau de confiance totale.Pour plus d'informations sur l'élévation des autorisations de votre application à l'aide de l'élévation d'autorisations ou du déploiement d'applications approuvées, consultez Sécurisation des applications ClickOnce.

[!REMARQUE]

Si votre organisation n'utilise pas le déploiement d'applications approuvées et a désactivé l'élévation d'autorisations, la déclaration des autorisations échoue.

Une fois que votre application a ces autorisations, elle peut accéder au répertoire de données à l'aide des appels de méthode de classes dans le System.IO.Vous pouvez obtenir le chemin d'accès du répertoire de données dans une application ClickOnce Windows Forms en utilisant la propriété DataDirectory définie sur la propriété CurrentDeployment de ApplicationDeployment.C'est la méthode la plus pratique et la plus recommandée pour accéder à vos données.L'exemple de code suivant montre comment effectuer cette opération pour un fichier texte nommé CSV.txt que vous avez inclus dans votre déploiement en tant que fichier de données.

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);
    }
}

Pour plus d'informations sur le marquage de fichiers en tant que fichiers de données dans votre déploiement, consultez Comment : inclure un fichier de données dans une application ClickOnce.

Vous pouvez obtenir également le chemin d'accès au répertoire de données en utilisant les variables appropriées sur la classe Application, par exemple LocalUserAppDataPath.

La manipulation d'autres types de fichiers peut nécessiter des autorisations supplémentaires.Si, par exemple, vous souhaitez utiliser un fichier de base de données Access (.mdb), votre application doit déclarer une confiance totale pour utiliser les classes System.Data appropriées.

d8saf4wy.collapse_all(fr-fr,VS.110).gifRépertoire des données et versions d'application

Chaque version d'une application comporte son propre répertoire de données, lequel est distinct de celui d'autres versions.ClickOnce crée ce répertoire que des fichiers de données soient inclus ou non dans le déploiement afin que l'application ait un emplacement pour créer de nouveaux fichiers de données au moment de l'exécution.Lorsqu'une nouvelle version d'une application est installée, ClickOnce copie tous les fichiers de données existants du répertoire de données de la version antérieure dans le répertoire de données de la nouvelle version, qu'ils fassent partie du déploiement d'origine ou qu'ils aient été créés par l'application.

ClickOnce remplace la version antérieure du fichier par la version plus récente du serveur si un fichier de données a une valeur de hachage dans la version antérieure de l'application différente de celle de la nouvelle version.Par ailleurs, si la version antérieure de l'application a créé un fichier portant le même nom qu'un fichier appartenant au déploiement de la nouvelle version, ClickOnce substitue le fichier de l'ancienne version par le nouveau fichier.Dans les deux cas, les anciens fichiers sont inclus dans un sous-répertoire du répertoire de données appelé .pre, afin que l'application puisse toujours accéder aux anciennes données à des fins de migration.

Si vous avez besoin d'une migration de données de plus grande ampleur, vous pouvez utiliser une API du déploiement ClickOnce pour exécuter une migration personnalisée de l'ancien répertoire de données vers le nouveau répertoire de données.Vous devrez tester un téléchargement disponible à l'aide de IsFirstRun, télécharger la mise à jour à l'aide de Update ou UpdateAsync et effectuer tout le travail de migration personnalisée des données dans votre propre répertoire une fois la mise à jour terminée.

d8saf4wy.collapse_all(fr-fr,VS.110).gifStockage isolé

Le stockage isolé fournit une API servant à créer et à accéder aux fichiers à l'aide d'une API simple.Le véritable emplacement des fichiers stockés est masqué au développeur et à l'utilisateur.

Le stockage isolé fonctionne dans toutes les versions du .NET Framework.Le stockage isolé fonctionne également dans les applications d'un niveau de confiance partiel sans subventions d'autorisation supplémentaires.Vous devez utiliser le stockage isolé si votre application doit s'exécuter sur un niveau de confiance partielle, mais il doit conserver des données spécifiques à l'application.

Pour plus d'informations, consultez Stockage isolé.

d8saf4wy.collapse_all(fr-fr,VS.110).gifAutres fichiers locaux

Si votre application doit utiliser ou enregistrer des données d'utilisateur final (rapports, images, musique, etc.), votre application nécessite FileIOPermission pour lire et écrire des données dans le système de fichiers local.

Données distantes

À un moment donné, il est possible que votre application doive récupérer des informations d'un site Web distant, telles que des données client ou des informations sur les marchés.Cette section traite des techniques les plus courantes pour récupérer des données distantes.

d8saf4wy.collapse_all(fr-fr,VS.110).gifAccès à des fichiers à l'aide de HTTP

Vous pouvez accéder aux données d'un serveur Web à l'aide de la classe WebClient ou HttpWebRequest dans l'espace de noms System.Net.Il peut s'agir de fichiers statiques ou d'applications ASP.NET qui retournent du texte brut ou des données XML.Si vos données sont en format XML, la façon la plus rapide de récupérer les données est d'utiliser la classe XmlDocument dont la méthode Load accepte une URL comme argument.Pour obtenir un exemple, consultez Reading an XML Document into the DOM.

Vous devez considérer la sécurité lorsque votre application accède aux données distantes sur HTTP.Par défaut, l'accès de votre application ClickOnce aux ressources réseau peut être restreint, selon la façon dont votre application a été déployée.Ces restrictions visent à éviter que des programmes malveillants n'accèdent à des données distantes privilégiées ou n'utilisent l'ordinateur d'un utilisateur pour attaquer d'autres ordinateurs du réseau.

Le tableau suivant répertorie les stratégies de déploiement que vous pouvez utiliser ainsi que les autorisations Web par défaut dont elles bénéficient.

Type du déploiement

Autorisations réseau par défaut

Installation via le Web

Peut uniquement accéder au serveur Web à partir duquel l'application a été installée.

Installation via un partage de fichiers

Ne peut accéder à aucun serveur Web.

Installation à partir d'un CD-ROM

Peut accéder à tous les serveurs Web.

Si votre application ClickOnce ne peut pas accéder à un serveur Web à cause des restrictions de sécurité, l'application doit déclarer WebPermission pour ce site Web.Pour plus d'informations sur l'extension des autorisations de sécurité pour une application ClickOnce, consultez Sécurisation des applications ClickOnce.

d8saf4wy.collapse_all(fr-fr,VS.110).gifAccès aux données via un service Web XML

Si vous exposez vos données comme un service Web XML, vous pouvez accéder aux données à l'aide d'un proxy de service Web XML.Ce proxy est une classe .NET Framework que vous créez à l'aide de Visual Studio.Les opérations du service Web XML, par exemple récupérer des clients, passer des commandes, etc. sont exposées comme des méthodes sur le proxy.Les services Web sont de ce fait bien plus simples à utiliser que le texte brut ou les fichiers XML.

Si votre service Web XML fonctionne sur HTTP, le service sera lié par les mêmes restrictions de sécurité que les classes WebClient et HttpWebRequest.

Vous pouvez également effectuer cette tâche à l'aide de Visual Studio.Pour plus d'informations, consultez Comment : ajouter et supprimer des références Web et Comment : ajouter et supprimer des références Web et Comment : ajouter et supprimer des références Web.  

d8saf4wy.collapse_all(fr-fr,VS.110).gifAccès direct à une base de données

Vous pouvez utiliser les classes de l'espace de noms System.Data pour établir des connexions directes avec un serveur de base de données tel qu'un serveur SQL Server sur votre réseau, mais soyez toutefois conscient des problèmes de sécurité afférents.Contrairement aux requêtes HTTP, les demandes de connexion de base de données sont toujours interdites par défaut si l'application bénéficie d'une confiance partielle ; vous n'avez une telle autorisation par défaut que dans le cas où vous installez votre application ClickOnce à partir d'un CD-ROM.Ainsi, votre application bénéfice d'un niveau de Confiance totale.Afin de pouvoir accéder à une base de données SQL Server spécifique, votre application doit demander SqlClientPermission ; pour accéder à une base de données autre que SQL Server, elle doit demander OleDbPermission.

La plupart du temps, vous ne devrez pas accéder directement à la base de données, mais plutôt via une application de serveur Web écrite dans ASP.NET ou un service Web XML.Un tel accès à la base de données est généralement la meilleure méthode si votre application ClickOnce est déployée à partir d'un serveur Web.Vous pouvez accéder au serveur dans un niveau de confiance partielle sans élever les autorisations de votre application.

Voir aussi

Tâches

Comment : inclure un fichier de données dans une application ClickOnce