Este artigo foi traduzido por máquina.

Pontos de dados

Criação de um cliente de fora do navegador com o Silverlight 3

John Papa

Este artigo se baseia em versões de pré-lançamento do Silverlight 3 e o Expression Blend.

Download do código disponível na Galeria de código do MSDN
Procure o código on-line

Conteúdo

Olhos em TheTarget
Instalar A área de trabalho
Conceitos básicos do manifesto
Executando off-line
Conectividade de rede
Armazenando dados off-line

Aplicativos de Silverlight 3 não são restritos a sendo executado em um navegador. Ele podem ser executados em um navegador ou ele possam ser desanexado do navegador e executar a partir da área de trabalho. Esses aplicativos fora de navegador permitem que você coloque a riqueza de aplicativos do Silverlight 3 diretamente para a área de trabalho sem a restrição de execução dentro de um navegador.

Na coluna deste mês, FALAREI sobre como criar um autônomo orientado a dados aplicativo Silverlight 3. Começarei demonstrando uma visão geral do aplicativo de exemplo do. Em seguida, vai descrevem as etapas necessárias para colocar o aplicativo e torná-lo trabalhar fora do navegador. Sendo fora do navegador requer alguns recursos adicionais, como uma capacidade de detectar conectividade. FALAREI sobre como detectar o status do aplicativo off-line e como manipular o armazenamento de dados off-line quando a conectividade de rede for interrompida. Outros recursos que discutirei ao longo do caminho esteja criando ícones para o aplicativo fora de navegador, usando o armazenamento isolado para armazenar dados no computador cliente, mostrando o status do aplicativo fora de navegador, e manipular o estado altera eventos. O aplicativo de exemplo é uma versão simples de um cliente Twitter-semelhante que envia e recupera as mensagens dos servidores Twitter. Todos os exemplos estão incluídos no download do código deste mês.

Olhos em TheTarget

Antes de mergulhar nos recursos de fora de navegador, é importante compreender que recursos que usará para criar o aplicativo de exemplo neste artigo, vamos começar com uma visão geral. O aplicativo de exemplo demonstra como criar um aplicativo orientado a dados com 3 do Silverlight e seus recursos de fora de navegador. O objetivo do aplicativo de exemplo é criar um cliente Twitter que permite o envio de novas mensagens e recuperação de amigo cronograma um usuário, respostas e mensagens diretas. Ele é uma versão simples e leve de um cliente Twitter, embora muitos recursos pôde ser adicionados após os modelos que discutirei aqui. a Figura 1 mostra o aplicativo de exemplo em execução fora do navegador.

fig01.gif

Figura 1 cliente Silverlight Twitter Visão geral

O SilverTwit aplicativo irá solicitar e mostrar as mensagens de todos o usuário é seguir quando o botão página inicial é clicado. Quando os botões de mala direta e respostas são clicados, as respostas para o usuário conectado e as mensagens diretas para o usuário conectado são recuperadas e exibidas, respectivamente. A solicitação para as mensagens é feita do aplicativo fora de navegador Silverlight para um serviço da Web (também incluído no projeto de exemplo) e, em seguida, o serviço da Web retransmite as solicitações para a API pública Twitter. Essa retransmissão através de um serviço de terceiros é necessária porque Twitter não permite comunicação de domínio cruzado fique em um cliente da Web para Twitter diretamente. No entanto, Twitter permitem que chamadas feitas a partir de aplicativos de servidor, como aquele usado na solução de exemplo. Outras alternativas são usar PopFly ou ele pipes para retransmitir as solicitações.

Para obter mais informações sobre diretivas de domínio cruzado, consulte minha coluna de setembro de 2008 pontos de dados. Essa coluna, aborde os formatos de arquivo e como as diretivas funcionam.

Quando um usuário insere uma mensagem e clica no botão de postagem, a mensagem é enviada por meio da retransmissão do serviço da Web para Twitter. Se o aplicativo não é possível detectar uma conexão de rede e um usuário tenta postar uma mensagem, a mensagem será armazenada localmente até que uma conexão de rede pode ser restaurada. Nesse momento a mensagem adiada será enviada para Twitter.

Observe que o cromado ao redor o aplicativo de exemplo mostrado na Figura 1 contém o ícone do aplicativo, título do aplicativo e o padrão minimizar, maximizar e feche ícones. O título e ícones usados para a janela, a área de trabalho e outros aspectos do aplicativo podem ser personalizados quando estiver criando o aplicativo no Visual Studio ou o Expression Blend. Essa janela é iniciada usando o processo de sllauncher.exe e seu aplicativo de fora de navegador do host a 3 do Silverlight.

Parte inferior do aplicativo de exemplo SilverTwit contém estatísticas sobre se uma conexão de rede é detectada ou não, se o aplicativo é executado em ou fora de um navegador e se o aplicativo tiver sido desanexado. Esses recursos todos os ajudam o aplicativo de fora de navegador identificar como ele deve operar. Por exemplo, se não for detectada uma conexão de rede, não há nenhuma razão para procurar novas mensagens ou enviar novas mensagens para Twitter. Quando está no estado desconectado da rede, o aplicativo deve reagir adequadamente. Um botão desanexar também existe na seção inferior do aplicativo que irá desanexar o aplicativo seja executado fora do navegador.

Instalar A área de trabalho

Aplicativos de Silverlight 2 são restritos para execução dentro de um navegador. No entanto, aplicativos do Silverlight 3 podem executar dentro do navegador ou check-out. O processo de colocar o aplicativo fora do navegador é conhecido como "desanexação." Depois que o aplicativo de Silverlight 3 tem sido desanexado, ele pode ser executado no menu Iniciar ou de um ícone na área de trabalho. Aplicativos de fora de navegador executados em área de trabalho em uma janela que está hospedada do processo de sllauncher.exe. Os aplicativos de navegador ainda podem acessar a rede e usar todas as bibliotecas de estrutura .NET disponíveis para o Silverlight enquanto eles estão desanexados. Há algumas limitações para aplicativos fora de navegador. Por exemplo, desde que eles não estão hospedados no navegador, as comunicações com DOM do navegador não são possíveis, como eles estão com aplicativos do Silverlight hospedados no navegador.

a Figura 2 descreve como um aplicativo de Silverlight 3 pode ser executado em um navegador e, em seguida, desanexado. Clique no botão desanexar executa o manipulador de eventos mostrado na Figura 2 , que basicamente executa o método Application.Current Detach(). a Figura 3 mostra a arquitetura. O método Application.Current.Detach irá gerar uma exceção se ele não é possível desanexar, portanto, alguns tratamentos de erros é uma boa idéia.

Figura 2 desanexando do navegador

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

A Figura 3 desanexando um aplicativo do Silverlight para executar fora o navegador

Os usuários, em seguida, podem decidir se eles tem certeza de que desejam desanexar o aplicativo de navegador. O Silverlight também concede ao usuário a opção de adicionar um atalho para a área de trabalho e / ou para o menu Iniciar para o aplicativo de fora de navegador. Depois que o usuário clica em OK, o aplicativo é instalado na área de trabalho e começa a inicialização (hospedado pelo processo de sllauncher.exe). Neste ponto, o navegador pode ser fechado e o aplicativo fora de navegador continua a executar em seu próprio.

O aplicativo pode ser removido clicando com o botão direito do mouse no aplicativo de fora de navegador e escolha Remover aplicativos no menu pop-up. Isso pode ser feito do aplicativo fora de navegador ou da mesma versão em execução no navegador. Depois de removido, o ícone da área de trabalho e o item do menu Iniciar são ambos removidos. Vale a pena observar que aplicativos fora do navegador não aparecerá na lista do painel de controle Adicionar/remover programas.

Conceitos básicos do manifesto

Colocar um aplicativo offline é um processo simples para o usuário e quase tão simples do ponto de vista de desenvolvimento. Versão Beta 3 do Silverlight requer algumas alterações simples a serem feitas para o arquivo appmanifest.xml no projeto do Silverlight para permiti-lo a serem tomadas fora do navegador. Se essas alterações não forem feitas, em seguida, o aplicativo de Silverlight não pode ser desanexado e executar fora do navegador. O AppManifest.xml está localizado na pasta propriedades por padrão e ele pode ser editado manualmente para incluir os recursos de fora de navegador.

a Figura 4 mostra o AppManifest.xml arquivos do aplicativo de exemplo com os itens de interesse em negrito na nova seção Deployment.ApplicationIdentity. O ShortName é usado nos atalhos para o aplicativo fora de navegador (no menu Iniciar e o atalho da área de trabalho). O título aparece na barra de título do aplicativo fora de navegador. Os ícones são opcionais; no entanto, em todos os ícones devem ser incluídos ou nenhum está incluído. Esse requisito podem ser alteradas na versão final do Silverlight 3, mas em beta, a falta de navegador pode não funcionar corretamente se alguns ícones forem especificados e não outros. Os vários ícones são usados para o atalho do menu Iniciar, o atalho do ícone da área de trabalho, o ícone para a janela no aplicativo fora de navegador e na caixa de diálogo que solicita que os usuários para decidir se desejam instalar o aplicativo fora do navegador.

A Figura 4 configuração do 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>

Executando off-line

Outro novo recurso ao Silverlight 3 é a propriedade Application.Current.RunningOffline. Essa propriedade retorna um valor Boolean que indica se o aplicativo de Silverlight está em execução online (em navegador) ou offline (fora do navegador). Isso é útil saber, especialmente quando você quiser executar código que se comunica com DOM do navegador do Silverlight. Se você estiver executando on-line, o aplicativo pode se comunicar com DOM. do navegador No entanto, se você estiver executando off-line, o aplicativo está hospedado no processo de sllauncher.exe e não tem um DOM (como esta não é um navegador). Portanto, antes de executar esse código, você pode verificar a propriedade de RunningOffline.

Quando o aplicativo fora de navegador é executado pela primeira vez, ele sempre é aberto em um tamanho padrão. Depois de aberto, a janela pode ser redimensionada, maximizada, minimizada ou fechada. O tamanho inicial e o controle da janela propriamente dito não é atualmente um recurso na versão Beta 3 Silverlight.

O aplicativo de exemplo mostrado na Figura 1 está em execução fora do navegador. Isso é indicado na parte inferior da janela onde diz "em execução fora do navegador". Essa verificação é feita usando o código mostrado na Figura 5 . Se o aplicativo foi executado no navegador, a mensagem seria lida "em execução no browser" como mostrado na Figura 6 , onde o aplicativo está sendo executado dentro do navegador.

A Figura 5 on-line ou off-line?

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

fig04.gif

A Figura 6 Running on-line

Outro novo recurso do Silverlight 3 é que o aplicativo é notificado por um evento (ExecutionStateChanged) sempre que o estado de execução do aplicativo é alterado. Há cinco estados diferentes (encontrados no enumerador de ExecutionStates) que podem causar isso ocorra:

  • RunningOnline – O aplicativo está em execução no navegador.
  • Desanexando – O aplicativo é desanexação do navegador.
  • Desanexado – O aplicativo agora é desanexado do navegador e em execução fora do navegador.
  • DetachedUpdatesAvailable – mesmo que desanexados, mas ele vê que atualizações estão disponíveis.
  • DetachedFailed – um evento de separação falha.

Como provam no Figura 1 (executando off-line) e a Figura 6 (executando on-line), a parte inferior do aplicativo mostra o estado atual como Detached desde que o aplicativo tiver sido desanexado. À medida que os eventos de alteração, a mensagem no aplicativo atualiza automaticamente si mesma usando ligação de dados.

Para obter mais informações sobre vinculação de dados no Silverlight, consulte minha coluna de setembro de 2008 pontos de dados " Aplicativos de serviço-Driven com Silverlight 2 E no WCF"). Essa coluna, aborde ligação de dados e modos de ligação.

Um manipulador de eventos pode ser configurado para escutar esses estados manipulando o evento ExecutionStateChanged, como mostrado abaixo:

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

Quando o evento ExecutionStateChanged for acionado com um estado de DetachUpdatesAvailable, o aplicativo de fora de navegador Silverlight 3 detectou que uma versão mais recente do aplicativo 3 do Silverlight pode ser baixada. O usuário pode, em seguida, feche o aplicativo fora de navegador e abra-o novamente para receber automaticamente a atualização. a Figura 7 mostra que a mensagem no aplicativo fora de navegador foi exibida quando o evento ExecutionStateChanged acionado.

fig05.gif

A Figura 7 atualizações estão disponíveis

Conectividade de rede

Ainda outro novo recurso do Silverlight 3 é que ele pode detectar se uma conexão de rede estiver disponível, graças ao método NetworkInterface.GetIsNetworkAvailable() no namespace System.NET. Essa verificação é essencial ao executar um aplicativo de fora de navegador que precisa se comunicar com os serviços da Web. Se a conexão de rede estiver inoperante, o aplicativo pode executar uma solução alternativa. Alguns solução pode incluir notificar o usuário do problema ou armazenar, possivelmente, os dados localmente até que uma conexão de rede esteja disponível.

O evento de NetworkChange.NetworkAddressChanged (também parte da classe System.Net.NetworkInformation) é executado quando detecta uma alteração de endereço de rede. Este evento pode ser tratado como mostrado abaixo:

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

O código na Figura 8 mostra o manipulador de eventos para o evento NetworkAddressChange. O código primeiro define uma propriedade Boolean de status de IsNetworkAvailable, que está vinculado a interface do usuário do Silverlight e mostra o usuário o status de conectividade de rede. a Figura 9 mostra que o aplicativo fora de navegador detectou que o endereço de rede foi perdido. As ligações atualizado a mensagem e a cor de status para vermelho. A maneira mais simples para testar isso é abrir a caixa de diálogo de conexões de rede e desabilitar todas as conexões de rede. Isso causará o evento de NetworkAddressChanged para acionar e a interface do usuário sejam atualizados através das ligações de dados.

A Figura 8 detectar alterações de endereço de rede

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

A Figura 9 endereço de rede não está disponível

Quando o aplicativo está sendo executado e a conexão de rede for perdida, um usuário pode ainda desejar postar uma mensagem para Twitter. (Tenha em mente que embora a conexão de rede pode estar ativa, o Twitter serviço pode estar pressionada. Uma maneira de determinar se Twitter está sendo executado é fazer um teste de ping contra ele.) O aplicativo de exemplo permite ao usuário enviar a mensagem ainda, mas porque ele não é possível enviar para Twitter imediatamente, a mensagem é armazenada no armazenamento isolado (armazenamento de persistência local do Silverlight). a Figura 8 mostra que quando a alteração de rede é detectada, se a rede foi disponibilizada apenas e não houver uma mensagem no armazenamento isolado, a mensagem será lançada Twitter.

Para obter mais informações sobre armazenamento isolado no Silverlight, consulte minha coluna fevereiro de 2009 pontos de dados" Agregado de dados E armazenamento isolado no Silverlight."

Armazenando dados off-line

Se o aplicativo não pode detectar um endereço de rede e um usuário tenta postar uma mensagem, os dados podem ser armazenados no armazenamento isolado. O aplicativo de exemplo permite que somente uma mensagem a ser armazenado uma vez; no entanto, isso pode ser aumentado, armazenando cada mensagem separadamente ou em XML. a Figura 10 mostra o código que verifica se a rede está disponível. Se ele estiver disponível, a mensagem é enviada para Twitter. Caso contrário, o código verifica se há já uma mensagem no armazenamento isolado. Se houver, o usuário é notificado de que somente uma mensagem pode ser armazenada por vez.

A Figura 10 enviar uma mensagem para 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);
}

Aplicativos fora do navegador obterá automaticamente 25MB de espaço disponível no armazenamento isolado. Aplicativos do Silverlight hospedado navegador online obtém 1 MB de armazenamento. Armazenamento adicional pode ser solicitado por meio da API IsolatedStorageFile.IncreaseQuoteTo, que solicitará que o usuário para permitir ou negar o aumento de cota.

Se não houver nenhuma mensagem no armazenamento isolado, nova mensagem do usuário é armazenada e o usuário é notificado de que a mensagem será enviada quando a conexão de rede for restabelecida. Quando o endereço de rede for restabelecido, o manipulador de eventos NetworkAddressChanged executará e irá receber a mensagem de fora do armazenamento isolado e enviá-lo (como mostrado na Figura 8 ).

Como você consulte, o fora de navegador solução do Silverlight 3 permite que aplicativos de Silverlight sejam executados na área de trabalho sem um navegador e sem uma conexão de rede. Ele tem o direcionamento para detectar a conectividade de rede, para executar a ação quando ocorrerem eventos de rede e para armazenar dados localmente se necessário. Experimente. Você certamente surgir com alguns usos excelentes para esses novos recursos!

Envie suas dúvidas e comentários para John ammdata@Microsoft.com.

John Papa (johnpapa. NET) é um consultor sênior com ASPSOFT e um fã de beisebol que gasta noites de verão raiz pelos Yankees com sua família. John, um MVP C#, Insider do Silverlight e INETA orador, é autor de vários livros, incluindo suas mais recentes intitulado Data-Driven Services with Silverlight 2 (o ' Reilly, 2009). Ele geralmente fala em conferências, como VSLive, DevConnections e Mix.