Obtener acceso local o remoto a los datos en aplicaciones ClickOnce

La mayoría de las aplicaciones usan o generan datos. ClickOnce le ofrece diversas opciones para leer y escribir datos, tanto local como remotamente.

Datos locales

Con ClickOnce, puede cargar y almacenar los datos localmente utilizando cualquiera de los siguientes métodos:

  • Directorio de datos de ClickOnce

  • Almacenamiento aislado

  • Otros archivos locales

Directorio de datos ClickOnce

Cada aplicación ClickOnce instalada en un equipo local dispone de un directorio de datos almacenado en la carpeta Documents and Settings. Todos los archivos incluidos en una aplicación ClickOnce y marcados como archivos de "datos" se copian en este directorio cuando se instala la aplicación. Los archivos de datos pueden ser de cualquier tipo. Los más comunes son los archivos de texto, XML y de base de datos como, por ejemplo, los archivos .mdb de Microsoft Access.

El directorio de datos está pensado para los datos administrados por aplicaciones, es decir, datos que la aplicación almacena y mantiene explícitamente. Todos los archivos estáticos, sin dependencias y que no estén marcados como archivos de "datos" en el manifiesto de aplicación residirán, en cambio, en el directorio de la aplicación; es el directorio donde residen los ensamblados y archivos ejecutables (.exe) de la aplicación.

Nota

Cuando se desinstala una aplicación ClickOnce, también se quita el directorio de datos. Nunca utilice el directorio de datos para almacenar datos administrados por el usuario final, como documentos.

Marcar archivos de datos en una distribución de ClickOnce

Para incluir un archivo existente en el directorio de datos, deberá marcarlo como archivo de datos en el archivo de manifiesto de la aplicación ClickOnce. Para obtener más información, vea Cómo: Incluir un archivo de datos en una aplicación ClickOnce.

Leer y escribir en el directorio de datos

Para leer desde el directorio de datos es necesario que la aplicación ClickOnce solicite permisos de lectura. Asimismo, para escribir en el directorio se necesitan permisos de escritura. La aplicación obtendrá estos permisos automáticamente si se configura para ejecutarse con Plena confianza. Para obtener más información sobre la forma de elevar los permisos de la aplicación utilizando la elevación de permisos o la implementación de aplicaciones de confianza, vea Proteger las aplicaciones ClickOnce.

Nota

Si la empresa no utiliza la implementación de aplicaciones de confianza y ha desactivado la elevación de permisos, la afirmación de permisos no funcionará.

Una vez que la aplicación haya obtenido estos permisos, podrá obtener acceso al directorio de datos utilizando llamadas a métodos sobre las clases de System.IO. Puede obtener la ruta de acceso del directorio de datos dentro de una aplicación ClickOnce de formularios Windows Forms mediante la propiedad DataDirectory definida en la propiedad CurrentDeployment de ApplicationDeployment. Ésta es la manera más conveniente y recomendada de tener acceso a sus datos. El ejemplo de código siguiente muestra cómo hacerlo en el caso de un archivo de texto denominado CSV.txt incluido en la implementación como archivo de datos.

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

Para obtener más información sobre cómo marcar archivos como archivos de datos en la implementación, vea Cómo: Incluir un archivo de datos en una aplicación ClickOnce.

También puede obtener la ruta del directorio de datos utilizando las variables correspondientes en la clase Application, como LocalUserAppDataPath.

Para manipular otros tipos de archivos puede que necesite permisos adicionales. Por ejemplo, si desea utilizar un archivo de base de datos de Access (.mdb), la aplicación debe afirmar una plena confianza para poder utilizar las clases System.Data correspondientes.

Versiones del directorio de datos y de la aplicación

Cada versión de una aplicación tiene su propio directorio de datos, que se encuentra aislado de las otras versiones. ClickOnce crea este directorio independientemente de que se incluyan archivos de datos en la implementación de modo que la aplicación disponga de una ubicación donde crear nuevos archivos de datos en tiempo de ejecución. Cuando se instala una nueva versión de una aplicación, ClickOnce copia todos los archivos de datos existentes del directorio de datos de la versión anterior al directorio de datos de la nueva versión, tanto si estaban incluidos en la implementación original como si fueron creados por la aplicación.

ClickOnce sustituirá la versión anterior del archivo por la nueva versión del servidor si un archivo de datos tiene un valor de hash diferente en la versión anterior de la aplicación. Asimismo, si la versión anterior de la aplicación creó un nuevo archivo con el mismo nombre que un archivo incluido en la implementación de la nueva versión, ClickOnce sobrescribirá el archivo de la versión anterior con el nuevo archivo. En ambos casos, los archivos anteriores se incluirán en un subdirectorio situado dentro del directorio de datos denominado .pre, de modo que la aplicación siga teniendo acceso a los datos anteriores para propósitos de migración.

Si necesita realizar una migración de datos más precisa, puede utilizar la API de implementación de ClickOnce para llevar a cabo una migración personalizada del directorio de datos anterior al nuevo directorio de datos. Tendrá que comprobar si hay alguna descarga disponible utilizando IsFirstRun, descargar la actualización mediante Update o UpdateAsync y realizar cualquier trabajo personalizado de migración de datos por sí mismo una vez finalizada la actualización.

Almacenamiento aislado

El almacenamiento aislado proporciona una API para crear y tener acceso a los archivos utilizando una sencilla API. La ubicación real de los archivos almacenados está oculta para el desarrollador y el usuario.

El almacenamiento aislado funciona en todas las versiones de .NET Framework; también funciona en aplicaciones de confianza parcial sin necesidad de concesiones de permisos adicionales. Deberá utilizar el almacenamiento aislado si la aplicación tiene que ejecutarse con confianza parcial, pero tendrá que mantener los datos específicos de la aplicación.

Para obtener más información, vea Almacenamiento aislado.

Otros archivos locales

Si la aplicación tiene que manipular o guardar datos del usuario final, como informes, imágenes, música, etc., necesitará FileIOPermission para leer y escribir datos en el sistema de archivos local.

Datos remotos

En algún momento, es probable que la aplicación tenga que recuperar información de un sitio Web remoto, como datos de clientes o información de mercado. En esta sección se describen las técnicas más comunes para recuperar datos remotos.

Tener acceso a archivos mediante HTTP

Puede obtener acceso a los datos de un servidor Web utilizando la clase WebClient o la clase HttpWebRequest del espacio de nombres System.Net. Los datos pueden ser archivos estáticos o aplicaciones ASP.NET que devuelven texto sin formato o datos XML. Si los datos están en formato XML, el modo más rápido de recuperarlos es utilizando la clase XmlDocument, cuyo método Load utiliza una dirección URL como argumento. Para obtener un ejemplo, vea Lectura de un documento XML en el DOM.

Tendrá que tener en cuenta la seguridad cuando la aplicación obtenga acceso a datos remotos a través de HTTP. El acceso de la aplicación ClickOnce a los recursos de red puede estar restringido de forma predeterminada, dependerá del modo en que se haya implementado la aplicación. Estas restricciones se aplican para impedir que los programas creados con fines malintencionados obtengan acceso a datos remotos privilegiados o puedan utilizar el equipo de un usuario para atacar otros equipos de la red.

En la siguiente tabla se muestran las estrategias de implementación que puede utilizar y los permisos de Web predeterminados.

Tipo de implementación

Permisos de red predeterminados

Instalación desde Web

Sólo puede tener acceso al servidor Web desde el que se instaló la aplicación

Instalación desde un recurso compartido de archivos

No puede tener acceso a los servidores Web

Instalación desde CD-ROM

Puede tener acceso a cualquier servidor Web

Si la aplicación ClickOnce no puede obtener acceso a un servidor web debido a las restricciones de seguridad, la aplicación deberá declarar WebPermission para dicho sitio web. Para obtener más información sobre la forma de incrementar los permisos de seguridad de una aplicación ClickOnce, vea Proteger las aplicaciones ClickOnce.

Tener acceso a datos a través de un Servicio Web XML

Si expone los datos como un servicio Web XML, podrá obtener acceso a los mismos utilizando un proxy de servicio Web XML. El proxy es una clase de .NET Framework que se crea mediante Visual Studio. Las operaciones del servicio Web XML, como recuperar clientes, realizar pedidos, etc., se exponen como métodos en el servidor proxy. De este modo, los servicios Web son más fáciles de utilizar que el texto sin formato o los archivos XML.

Si el servicio Web XML funciona a través de HTTP, estará limitado por las mismas restricciones de seguridad que las clases WebClient y HttpWebRequest.

También puede realizar esta tarea utilizando Visual Studio. Para obtener más información, vea Cómo: Agregar y quitar referencias Web y Cómo: Agregar y quitar referencias Web y Cómo: Agregar y quitar referencias Web.  

Tener acceso a una base de datos directamente

Puede utilizar las clases del espacio de nombres System.Data para establecer conexiones directas con un servidor de bases de datos como SQL Server en la red, aunque deberá tener en cuenta las cuestiones de seguridad. A diferencia de las solicitudes HTTP, las solicitudes de conexión de base de datos siempre están prohibidas de forma predeterminada en condiciones de confianza parcial; sólo obtendrá dichos permisos de forma predeterminada si instala la aplicación ClickOnce desde un CD-ROM. Esto otorga a la aplicación una plena confianza. Para permitir el acceso a una base de datos específica de SQL Server, la aplicación deberá solicitar el SqlClientPermission correspondiente; para permitir el acceso a una base de datos que no sea SQL Server, deberá solicitar un OleDbPermission.

La mayoría de las veces, no tendrá que obtener acceso a la base de datos directamente, sino que obtendrá acceso a la misma a través de una aplicación de servidor web escrita en ASP.NET o un servicio Web XML. Esta forma de obtener acceso a la base de datos suele ser la mejor si la aplicación ClickOnce se ha implementado desde un servidor web. Puede obtener acceso al servidor con confianza parcial, sin tener que elevar los permisos de la aplicación.

Vea también

Tareas

Cómo: Incluir un archivo de datos en una aplicación ClickOnce