Este artículo proviene de un motor de traducción automática.

Puntos de datos

Creación de un cliente de fuera de explorador con Silverlight 3

John Papa

Este artículo se basa en versiones preliminares de 3 de Silverlight y Expression Blend.

Descarga de código de la Galería de código de MSDN
Examinar el código en línea

Contenido

Ojos en TheTarget
Instalar en el escritorio
Fundamentos de manifiesto
Ejecutar sin conexión
Conectividad de red
Almacenar datos sin conexión

Las aplicaciones Silverlight 3 ya no están restringidas a que se ejecutan en un explorador. Pueden ejecutar en un explorador o que se puedan separada desde el explorador y ejecutar desde el escritorio. Estas aplicaciones fuera de explorador permiten para que aparezca la riqueza de aplicaciones de Silverlight 3 directamente para el escritorio sin las restricciones de ejecución en un explorador.

En la columna de este mes, HABLARÉ sobre cómo crear un independientes controladas por datos aplicación Silverlight 3. Empezará por demostrar una introducción a la aplicación de ejemplo de. A continuación, se describen los pasos necesarios para realizar la aplicación y hacer que trabajar fuera del explorador. Está fuera del explorador de requiere algunas características adicionales como una capacidad de detectar la conectividad. HABLARÉ sobre cómo detectar el estado de la aplicación sin conexión y cómo controlar el almacenamiento de datos sin conexión cuando se interrumpa la conectividad de red. Otras características que abordaré en el camino están creando los iconos en la aplicación fuera de explorador, utilizando el almacenamiento aislado para almacenar datos en el equipo cliente, que muestra el estado de la aplicación fuera de explorador, y controla el estado de eventos de cambio. La aplicación de ejemplo es una versión ligera de un cliente Twitter-similar al que envía y recupera los mensajes de los servidores Twitter. Todos los ejemplos se incluyen en descarga de código de este mes.

Ojos en TheTarget

Antes de comenzar con las características de fuera de explorador, es importante comprender qué características VOY a utilizar para generar la aplicación de ejemplo en este artículo, por lo que Empecemos con una descripción general. La aplicación de ejemplo muestra cómo crear una aplicación controladas por datos con 3 de Silverlight y sus características de fuera de explorador. El objetivo de la aplicación de ejemplo es crear un cliente Twitter que permite el envío de mensajes nuevos y la recuperación de escala de tiempo de un usuario amigo, respuestas y mensajes directos. Es una versión sencilla, ligera, de un cliente Twitter, aunque muchas más características se puede agregar después de los modelos que abordaré aquí. la figura 1 muestra la aplicación de ejemplo que se ejecuta fuera del explorador.

fig01.gif

Figura 1 cliente Silverlight Twitter un vistazo

Al hacer clic en el botón Inicio sigue la SilverTwit aplicación solicitará y mostrar los mensajes de todos los usuarios el usuario. Cuando se hace clic en los botones directos y respuestas, se recuperan las respuestas para el usuario ha iniciado sesión y los mensajes directos para el usuario que ha iniciado sesión y se muestra, respectivamente. Se realiza la solicitud de los mensajes de la aplicación de Silverlight fuera de explorador a un servicio Web (también se incluye en el proyecto de ejemplo) y, a continuación, el servicio Web retransmite las solicitudes a la API pública Twitter. Este retransmisión a través de un servicio de terceros es necesario porque Twitter no permite la comunicación entre dominios realizar desde un cliente Web Twitter directamente. Sin embargo, Twitter permite las llamadas realizadas desde aplicaciones de servidor como la utiliza en la solución de ejemplo. Otras alternativas son utilizar PopFly o tuberías de Yahoo para las solicitudes de retransmisión.

Para obtener más información acerca de las directivas de entre dominios, consulte mi columna de puntos de datos de septiembre de 2008. En esa columna, describa los formatos de archivo y cómo funcionan las directivas.

Cuando un usuario escribe un mensaje y haga clic en el botón contabilizar, el mensaje se envía por medio de la retransmisión de servicio Web en Twitter. Si la aplicación no puede detectar una conexión de red y un usuario intenta enviar un mensaje, el mensaje se almacenarán localmente hasta que se puede restaurar una conexión de red. En ese momento el mensaje aplazado se enviará a Twitter.

Observe que el cromo alrededor de la aplicación de ejemplo que se muestra en la figura 1 contiene el icono de la aplicación, el título de la aplicación y el estándar Minimizar, Maximizar y Cerrar los iconos. El título y los iconos utilizados para la ventana, el escritorio y otros aspectos de la aplicación se pueden personalizar al va a crear la aplicación en Visual Studio o Expression Blend. Esta ventana se inicia con el proceso de sllauncher.exe y su aplicación de fuera de explorador de host del Silverlight 3.

La parte inferior de la aplicación de ejemplo SilverTwit contiene estadísticas de si una conexión de red se detecta o no, si la aplicación se ejecuta en o fuera de un explorador, y si se ha separa la aplicación. Estas características todas ayudan a identificar cómo debe operar la aplicación de fuera de explorador. Por ejemplo, si no se detecta una conexión de red, no hay ninguna razón para buscar los mensajes nuevos o enviar nuevos mensajes a Twitter. En este estado de red desconectada, la aplicación debe reaccionar en consecuencia. También existe un botón desasociar en la sección inferior de la aplicación que se separar la aplicación se ejecute fuera del explorador.

Instalar en el escritorio

Las aplicaciones Silverlight 2 están restringidas a ejecutarse en un explorador. Sin embargo aplicaciones Silverlight 3 pueden ejecutar dentro del explorador o salida. El proceso de adoptar la aplicación fuera del explorador de se conoce como "Desconectar". Una vez que se ha separa la aplicación de Silverlight 3, se puede ejecutar desde el menú Inicio o desde un icono del escritorio. Las aplicaciones de fuera de explorador se ejecutan en el escritorio dentro de una ventana que está alojado desde el proceso de sllauncher.exe. Las aplicaciones de fuera de explorador todavía pueden tener acceso a la red y utilizan todas las .NET framework bibliotecas de disponibles para Silverlight mientras están separadas. Existen algunas limitaciones para las aplicaciones fuera de explorador. Por ejemplo, dado que no se alojan en el explorador, las comunicaciones con DOM el explorador no son posibles que están con aplicaciones Silverlight alojadas en el explorador.

la figura 2 resume cómo se puede ejecutar una aplicación de Silverlight 3 en un explorador y, a continuación, separa. Haga clic en el botón desasociar se ejecuta el controlador de eventos que se muestra en la figura 2 , que, en última instancia, se ejecuta el método Application.Current detach(). la figura 3 muestra la arquitectura. El método Application.Current.detach generará una excepción si no se puede separar, así algunas tratamiento de errores es una buena idea.

Figura 2 separar desde el explorador de área de trabajo

private void DetachButton_Click(object sender, RoutedEventArgs e)
{
    try {
        Application.Current.Detach(); // take the app out of browser
    }
    catch (InvalidOperationException opex)    {
        MessageBox.Show("Application is already detached" +
          " to the desktop.");
    }
    catch (Exception ex)    {
        MessageBox.Show("Application could not be detached" +
          " to the desktop."+ Environment.NewLine + 
          ex.Message);
    }
}

fig03.gif

La figura 3 separar una aplicación de Silverlight para ejecutar fuera el explorador de área de trabajo

Los usuarios, a continuación, pueden decidir si está seguro de que desean desasociar de la aplicación desde el explorador. Silverlight también proporciona al usuario la opción de agregar un acceso directo en el escritorio o el menú Inicio para la aplicación fuera de explorador. Una vez que el usuario hace clic en ACEPTAR, la aplicación se instala en el escritorio y comienza a iniciar (alojado por el proceso de sllauncher.exe). En este punto, se puede cerrar el explorador y la aplicación fuera de explorador continúa ejecutándose en su propia.

La aplicación se puede quitar al hacer clic con el botón secundario en la aplicación fuera de explorador y eligiendo quitar aplicaciones en el menú emergente. Esto puede realizarse desde cualquier la aplicación fuera de explorador o de la misma versión ejecutando en el explorador. Una vez quitado, el icono del escritorio y el elemento de menú Inicio se ambos quitan. Merece la pena destacar que no aparecerán aplicaciones fuera del explorador en la lista del panel de control Agregar o quitar programas.

Fundamentos de manifiesto

Poner una aplicación fuera de conexión, se es un simple proceso para el usuario y casi tan sencillo desde el punto de vista de desarrollo. Versión beta 3 de Silverlight requiere unos pocos cambios simples realizarse en el archivo appmanifest.xml en el proyecto de Silverlight para que pueda realizarse fuera del explorador de. Si no se realizan estos cambios, a continuación, la aplicación de Silverlight no se separa y ejecutar fuera del explorador de. El AppManifest.xml se encuentra en la carpeta de propiedades de forma predeterminada y puede modificarse manualmente para que incluya las capacidades de fuera de explorador.

la figura 4 se muestra la AppManifest.xml archivos de la aplicación de ejemplo con los elementos de interés en negrita en la sección Deployment.ApplicationIdentity nueva. El ShortName se utiliza en los accesos directos para la aplicación fuera de explorador (en el menú Inicio y el acceso directo del escritorio). El título aparece en la barra de título de la aplicación fuera de explorador. Los iconos son opcionales; sin embargo, bien todos los iconos se deben incluir o no se incluyen. Este requisito puede cambiar en la versión final de Silverlight 3, pero en la versión beta, la fuera de explorador no funcionarían correctamente si se especifican algunos iconos y otros no. Los distintos iconos se utilizan para el acceso directo del menú Inicio, el acceso directo del icono del escritorio, el icono de la ventana de la aplicación fuera de explorador y en el cuadro de diálogo que solicita a los usuarios decidir si desean instalar la aplicación fuera del explorador.

La Figura 4 Configuración de la AppManifest.xml

<Deployment xmlns="https://schemas.microsoft.com/client/2007/deployment"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        EntryPointAssembly="SilverTwit"    
        EntryPointType="SilverTwit.App">   
  <Deployment.Parts>
    </Deployment.Parts>
  <Deployment.ApplicationIdentity>
    <ApplicationIdentity
         ShortName="SilverTwit"
         Title="SilverTwit - Silverlight Twitter Client">
      <ApplicationIdentity.Blurb>Tweet, tweet and retweet</ApplicationIdentity.Blurb>
      <ApplicationIdentity.Icons>
        <Icon Size="16x16">images/SilverTwit16.png</Icon>
        <Icon Size="32x32">images/SilverTwit32.png</Icon>
        <Icon Size="48x48">images/SilverTwit48.png</Icon>
        <Icon Size="128x128">images/SilverTwit128.png</Icon>
      </ApplicationIdentity.Icons>
    </ApplicationIdentity>
  </Deployment.ApplicationIdentity>
</Deployment>

Ejecutar sin conexión

Otra característica nueva agregado a Silverlight 3 es la propiedad Application.Current.RunningOffline. Esta propiedad devuelve un valor de tipo Boolean que indica si la aplicación de Silverlight está funcionando en línea (en explorador) o sin conexión (fuera de explorador). Esto es útil para saber, especialmente cuando es posible que desea ejecutar código que se comunica con DOM el explorador de Silverlight. Si está ejecutando en línea, la aplicación puede comunicarse con DOM el explorador Sin embargo, si está ejecutando sin conexión, la aplicación se aloja en el proceso de sllauncher.exe y no tiene un DOM (ya que no es un explorador). Por lo tanto, antes de ejecutar este código, se puede comprobar la propiedad RunningOffline.

Cuando la aplicación fuera de explorador se ejecuta en primer lugar, siempre se abre en un tamaño predeterminado. Una vez abierto, la ventana puede cambiar el tamaño, maximizada, minimizada o cerrada. El tamaño y control de la ventana propia inicial no es actualmente una característica de la versión beta 3 de Silverlight.

La aplicación de ejemplo que se muestra en la figura 1 se ejecuta fuera del explorador. Esto se indica en la parte inferior de la ventana donde dice "ejecutar fuera de explorador". Esta comprobación se realiza mediante el código se muestra en la figura 5 . Si la aplicación se está ejecutando en el explorador, el mensaje podría leer "en ejecución en Browser" como se muestra en la figura 6 , donde la aplicación se está ejecutando dentro del explorador.

¿La figura 5 en línea o sin conexión?

private void SetOfflineStatus()
{
    if (Application.Current.RunningOffline)
        stats.RunningModeMessage = "Running Out of Browser";
    else
        stats.RunningModeMessage = "Running In Browser";
}

fig04.gif

Figura 6 en ejecución en

Otra característica nueva de Silverlight 3 es que la aplicación está concluida mediante un evento (ExecutionStateChanged) siempre que cambia el estado de ejecución de la aplicación. Existen cinco estados diferentes (se encuentra en el enumerador ExecutionStates) que pueden ocasionar esto ocurra:

  • RunningOnline-la aplicación se está ahora ejecutando en el explorador.
  • Desconectar-se desasocia la aplicación desde el explorador.
  • Desasociado: la aplicación está ahora desasociada desde el explorador y ejecutar fuera del explorador.
  • DetachedUpdatesAvailable-igual como separada, pero ve que las actualizaciones están disponibles.
  • DetachedFailed-un evento de separar error.

Como se demuestra en Figura 1 (que se ejecuta sin conexión) y figura 6 (en ejecución en línea), la parte inferior de la aplicación muestra el estado actual como Detached puesto que la aplicación se ha separado. A medida que los eventos cambian, el mensaje de la aplicación actualiza automáticamente sí utiliza el enlace de datos.

Para obtener más información sobre el enlace de datos de Silverlight, consulte mi columna de septiembre de 2008 puntos de datos " Condicionada por el aplicaciones de servicio con Silverlight 2 Y WCF"). En esa columna, describa el enlace de datos y los modos de enlace.

Un controlador de eventos se puede configurar para escuchar de estos estados controlando el evento ExecutionStateChanged, tal y como se muestra a continuación:

Application.Current.ExecutionStateChanged += new EventHandler(Network_ExecutionStateChanged);

Cuando se desencadena el evento de ExecutionStateChanged con un estado de DetachUpdatesAvailable, la aplicación de Silverlight 3 fuera de explorador ha detectado que se puede descargar una versión más reciente de la aplicación de Silverlight 3. El usuario puede, a continuación, cierre la aplicación fuera de explorador y vuelva a abrirlo para recibir automáticamente la actualización. la figura 7 muestra que el mensaje de la aplicación fuera de explorador se muestra cuando desencadena el evento ExecutionStateChanged.

fig05.gif

La figura 7 las actualizaciones están disponibles

Conectividad de red

Todavía otra característica nueva de Silverlight 3 es que puede detectar si una conexión de red es disponible, thanks al método NetworkInterface.GetIsNetworkAvailable() en el espacio de nombres System.Net. Esta comprobación es esencial cuando se ejecuta una aplicación fuera de explorador que debe comunicarse con servicios Web. Si la conexión de red está hacia abajo, la aplicación puede realizar una solución. Alguna solución podría incluir notificar al usuario del problema o, posiblemente, almacenar los datos localmente hasta que esté disponible una conexión de red.

Se ejecuta el evento de NetworkChange.NetworkAddressChanged (también parte de la clase System.Net.NetworkInformation) cuando detecta un cambio de dirección de red. Este evento se puede controlar como se muestra a continuación:

NetworkChange.NetworkAddressChanged += 
  new NetworkAddressChangedEventHandler(NetworkChange_  NetworkAddressChanged);

El código de la figura 8 muestra el controlador de eventos para el evento NetworkAddressChange. El código establece primero una propiedad de estado de tipo Boolean de IsNetworkAvailable, que está enlazado a la interfaz de usuario de Silverlight y muestra al usuario el estado de la conectividad de red. la figura 9 muestra que la aplicación fuera de explorador ha detectado que se ha perdido la dirección de red. Los enlaces actualizan el mensaje y el color de estado a rojo. La manera más sencilla de comprobarlo es abrir el cuadro de diálogo Conexiones de red y deshabilitar todas las conexiones de red. Esto hará que el evento NetworkAddressChanged para desencadenar y la interfaz de usuario que actualizarse a través de los enlaces de datos.

Figura 8 detectar los cambios de direcciones de red

private void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
    stats.IsNetworkAvailable = NetworkInterface.GetIsNetworkAvailable();

    if  (NetworkInterface.GetIsNetworkAvailable())
    {
        // get the stored tweet, try to post it
        if (IsolatedStorageSettings.ApplicationSettings.Contains(TWEET_STORAGE))
        {
            PostTweet(IsolatedStorageSettings.ApplicationSettings[TWEET_STORAGE].ToString());
        }
    }
}

fig09.gif

Figura 9 direcciones de red no está disponible

Cuando se ejecuta la aplicación y se pierde la conexión de red, un usuario podría desear todavía enviar un mensaje a Twitter. (Tenga en cuenta que aunque es posible que se activa la conexión de red, el servicio Twitter puede ser hacia abajo. Una forma para determinar si se está ejecutando Twitter es realizar una prueba de ping en él.) La aplicación de ejemplo permite al usuario enviar el mensaje aún, pero porque no puede enviarse a Twitter inmediatamente, el mensaje se almacena en el almacenamiento aislado (almacén de persistencia local de Silverlight). la figura 8 muestra que cuando se detecta el cambio de la red, si la red sólo estuvo disponible y no hay un mensaje en el almacenamiento aislado, éste se contabilizará Twitter.

Para obtener más información sobre el almacenamiento aislado de Silverlight, consulte mi columna de 2009 febrero puntos de datos" Datos distribuidos Y el almacenamiento aislado de Silverlight."

Almacenar datos sin conexión

Si la aplicación no puede detectar una dirección de red y un usuario intenta enviar un mensaje, los datos se almacenan en el almacenamiento aislado. La aplicación de ejemplo permite sólo un mensaje a almacenarse en un momento; sin embargo, esto podría aumentarse almacenando cada uno de los mensajes por separado o dentro de XML. la figura 10 muestra el código que comprueba si la red está disponible. Si está disponible, el mensaje se envía en a Twitter. Caso contrario es así, el código comprueba para ver si hay ya un mensaje en el almacenamiento aislado. Si no hay, se notifica al usuario que sólo un mensaje puede almacenarse en un momento.

Figura 10 enviar un mensaje a Twitter

private void PostTweet()
{
    string tweetText = TweetTextBox.Text;
    if (!NetworkInterface.GetIsNetworkAvailable())
    {
        if (IsolatedStorageSettings.ApplicationSettings.Contains(TWEET_STORAGE))
        {
            MessageBox.Show(
                "Network connection is not available and only 1 tweet" + 
                " can be stored for delayed posting to Twitter.");
        }
        else
        {
            IsolatedStorageSettings.ApplicationSettings.Add(TWEET_STORAGE, tweetText);
            MessageBox.Show(
                "Network connection is not available. The post" +
                " will be stored until connectivity returns.");
        }
        return;
    }

    PostTweet(tweetText);
}

Las aplicaciones fuera de explorador obtener automáticamente 25 MB de espacio disponible en el almacenamiento aislado. Aplicaciones de Silverlight de explorador, alojado en línea obtienen 1 MB de almacenamiento. Se puede solicitar almacenamiento adicional a través de la API de IsolatedStorageFile.IncreaseQuoteTo, que le pida al usuario para permitir o denegar el aumento de cuota.

Si no hay ningún mensaje en el almacenamiento aislado, nuevo mensaje del usuario se almacena y se notifica al usuario que el mensaje se enviará cuando se restablezca la conexión de red. Cuando se restablezca la dirección de red, el controlador de eventos NetworkAddressChanged ejecutará y se extraer el mensaje fuera de almacenamiento aislado y enviarlo (como se muestra en la figura 8 ).

Como se vea, fuera del explorador de soluciones Silverlight 3 permite que aplicaciones Silverlight ejecutar en el escritorio sin un explorador y sin una conexión de red. Tiene la estructura para detectar la conectividad de red, para realizar la acción cuando se produzcan eventos de red y para almacenar datos localmente si es necesario. Anímese a intentarlo. Está seguro de proponer algunos usos excelente para estas nuevas características de.

Envíe sus preguntas y comentarios para John ammdata@Microsoft.com.

John Papa (johnpapa. NET) es un consultor jefe con ASPSOFT y un ventilador de béisbol que dedica las noches de verano a animar a para los Yankees en compañía con su familia. Altavoz de Juan, un EXPERTO en C#, especialista en Silverlight y INETA, ha escrito varios libros, incluido su última título Data-Driven Services with Silverlight 2 (o ' Reilly, 2009). A menudo ofrece en conferencias, como VSLive, combinación y DevConnections.