Exportar (0) Imprimir
Expandir Tudo

Criar um aplicativo de consulta flexível

Atualizado: fevereiro de 2014

 

Logotipo do DataMarket

Use as Referências de Serviço no Visual Studio para consumir programaticamente conjuntos de dados do Marketplace que o editor de dados especificou como conjuntos de dados de consulta flexível.

ImportantImportante
O código em uma referência de serviço não deve ser modificado, pois a modificação pode resultar em funcionamento inadequado e efeitos colaterais. Além disso, as modificações serão substituídas sempre que a referência de serviço for atualizada.

Antes de prosseguir, verifique se você tem:

  • Uma conta válida do Windows Live ID. Se não tiver uma Live ID, vá para a página inicial do Windows Live e inscreva-se.

  • Uma conta válida do Marketplace. Se não tiver uma Marketplace, vá para o tópico Criar sua conta do Marketplace e siga as instruções.

  • Uma assinatura para o conjunto de dados de consulta flexível do Marketplace que você deseja usar em seu aplicativo. Se ainda não se inscreveu em um conjunto de dados de consulta flexível, acesse Assinar uma oferta de dados e siga as instruções.

 

Seção Descrição

Etapa 1: Criar seu projeto no Visual Studio

Etapas a serem executadas no Visual Studio para iniciar um novo projeto de console para o Marketplace.

Etapa 2: Adicionar a referência de serviço para o serviço de dados

As etapas necessárias para adicionar uma referência de serviço para consumir dados do Marketplace.

Etapa 3: Consumir dados com código gerenciado

Código que você grava para consumir um conjunto de dados de consulta flexível do Marketplace.

Código concluído

O aplicativo de console completo em C# e VB.

Metadados

Os metadados XML de exemplo para esse conjunto de dados de consulta flexível.

Executar o Visual Studio como administrador

  1. Localize o Visual Studio no Menu Iniciar.

  2. Clique com botão direito do mouse em Visual Studio.

  3. No menu suspenso, clique em Executar como administrador.

  4. Quando for perguntado se deseja permitir que este programa (devenv.exe) faça alterações em seu computador, clique em Sim.

Criar um novo projeto

  1. Na página de início do Visual Studio, selecione Novo Projeto...

  2. Selecione Visual C# e Aplicativo de Console (Visual Basic e Aplicativo de Console se preferir o Visual Basic) na caixa de diálogo Novo Projeto.

  3. Na lista suspensa à esquerda, na parte superior da caixa de diálogo Novo Projeto, selecione .NET Framework 4.

    Padrões do Visual Studio 2010 para .NET Framework 4. Se usar uma versão anterior do Visual Studio e não tiver o .NET Framework 4 instalado, vá para a página de download do .NET Framework 4 para baixar e instalá-lo.

  4. Dê um nome significativo ao projeto. Por exemplo, para este projeto nomeie-o USCrime2006and2007.

  5. Clique em OK.

  6. Adicione o código a seguir à parte superior de Program.cs (Program.vb), necessário para autenticar o acesso ao conjunto de dados.

    using System.Net; // needed for authentication
    

Após iniciar o Visual Studio como administrador e criar um novo aplicativo de console (Etapa 1), adicione a referência de serviço para o serviço de dados que você deseja consumir.

Obter a URL raiz do serviço

  1. Vá para a Marketplace página inicial.

  2. Clique na guia Meus Dados.

  3. Localize o serviço de dados Crimes nos Estados Unidos entre 2006 e 2008.

  4. Clique em Usar à direita do nome do conjunto de dados. Isso leva você à Página de Detalhes deste conjunto de dados.

  5. Role a página para as guias abaixo de Saiba como usar esses dados no Visual Studio

  6. Clique na guia Detalhes.

  7. Localize a URL raiz do serviço.

    URL da raiz do serviço


    Figura 1 – URL raiz do serviço

  8. Copie a URL raiz do serviço para a área de transferência.

Adicionar a referência de serviço ao projeto

  1. Volte ao projeto do Visual Studio.

  2. Em Gerenciador de Soluções, clique com o botão direito do mouse em Referências.

  3. Selecione Adicionar Referência de Serviço... no menu suspenso.

  4. Cole a URL raiz do serviço da área de transferência no menu suspenso Endereço.

  5. Clique em Ir.
    Aguarde alguns minutos até que a caixa de texto Serviços seja preenchida com o serviço disponível para seu projeto.

  6. Insira um nome de namespace significativo na caixa de texto Namespace.
    Por exemplo: DataGovCrimes.

  7. Clique em OK.
    O nome da sua referência de serviço aparecerá em Referências de Serviço no Gerenciador de Soluções.

Adicionar a referência de serviço ao código

  1. Selecione Program.cs (Program.vb) no Painel de Código do Visual Studio.

  2. Adicione a seguinte instrução que torna a referência de serviço acessível ao seu aplicativo.

    noteObservação
    Use o namespace do programa e o nome do namespace do serviço de referência criado no número 6 acima.

    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    

Criar uma classe para fazer o trabalho

  1. Crie uma classe pública, CrimeData, no namespace do seu projeto.

  2. Crie duas variáveis privadas em sua classe.

    • Um URI para o serviço.

    • Um contêiner de serviço que armazena as credenciais de serviço no contexto do serviço.

      Localizar o tipo de entidade

      1. Vá para a “Página de Detalhes”.

      2. Clique em Começar com esse conjunto de dados.

      3. Clique na guia Visão Geral.
        O nome do conjunto de entidades e o nome da coleção de entidades são exibidos.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    }  // end class CrimeData
    
    
  3. Crie um construtor para a classe CrimeData.
    O construtor inicializa as duas variáveis privadas e inicializa as credenciais do usuário.
    SERVICE_ROOT_URL é o link https que você copiou para sua área de transferência acima. (Consulte Obter a URL raiz do serviço.)
    O context é o contêiner de serviço que é usado para as credenciais do usuário.
    A propriedade IgnoreMissingProperties fica definida como true para tornar o cliente robusto para as propriedades que estão sendo adicionadas ao tipo no servidor. (Consulte a Documentação do MSDN para obter mais informações.)
    USER_ID é seu Live ID.
    SECURE_ACCOUNT_KEY é a chave da conta do Marketplace que você está usando para este aplicativo. (Consulte Gerenciar sua conta do Marketplace).

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    
        // constructor for the CrimeData class
        public CrimeData()  
        {
            serviceURI = new Uri(SERVICE_ROOT_URL);
            context = new datagovCrimesContainer(serviceURI);
            context.IgnoreMissingProperties = true;
            context.Credentials = new NetworkCredential(USER_ID,
                                                        SECURE_ACCOUNT_ID); // Your Marketplace account key
        }  // end constructor
    
    }  // end class CrimeData
    
    
  4. Crie um método público em sua classe que retorna uma lista genérica. Para o nosso programa, o tipo de lista genérico é CityCrime.
    Este método consulta o serviço e, se for bem-sucedido, retorna o conjunto de resultados como uma lista. Se a consulta falhar por qualquer motivo, o método retorna um null (Nothing).

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    
        // constructor for the CrimeData class
        public CrimeData()
        {
            serviceURI = new Uri(SERVICE_ROOT_URL);
            context = new datagovCrimesContainer(serviceURI);
            context.IgnoreMissingProperties = true;
            context.Credentials = new NetworkCredential(USER_ID,
                                                        SECURE_ACCOUNT_ID);
        }  // end constructor
    
        // -- public method that returns a list of crime data
        public IList<CityCrime> GetCrimeData()
        {
            IEnumerable<CityCrime> query = context.CityCrime.Where(crime => crime.City == "Newport").OrderBy(crime => crime.Year);
    
            try
            {
                return query.ToList();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return null;
            }  // end try
    
        }  // end function GetCrimeData
    
    }  // end class CrimeData
    
    

    A consulta pode ser qualquer consulta LINQ Marketplace e, opcionalmente, pode incluir o filtro where (Where) e/ou orderby (Order By).
    Para obter mais informações sobre consultas LINQ, consulte Expressões de consulta LINQ (Guia de Programação C#) (LINQ no Visual Basic).
    Para obter informações sobre as limitações de consulta LINQ no Marketplace, consulte Opções de consulta do OData com suporte.

    As consultas LINQ a seguir são válidas no Marketplace.

    
    query = from crimes in context.CityCrime
                where crimes.City == "Newport" 
                orderby crimes.Year Ascending
                select crimes;
    //  this query could also be written as
    //  IEnumerable<CityCrime> query = context.CityCrime.Where(crime => crime.City == "Newport").OrderBy(crime => crime.Year);
    
    
  5. Escreva o código em Main() que utiliza a classe CrimeData e o método GetCrimeData() para consumir os dados e exibi-los.

    
    using System.Net;
    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    
    namespace USCrime2006and2007
    {
       class Program
       {
          public static void Main(string[] args)
          {
              IList<CityCrime> crimeList;  // CityCrime is the entity type returned by the service
              CrimeData crimeData = new CrimeData();
    
              crimeList = crimeData.GetCrimeData();
    
              if (crimeList != null)
              {
                  Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}","Year",
                                                                          "City",
                                                                          "State",
                                                                          "Population",
                                                                          "Violent Crime");
    
                  foreach (CityCrime c in crimeList)
                  {
                      Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}", c.Year, 
                                                                               c.City, 
                                                                               c.State, 
                                                                               c.Population,
                                                                               c.ViolentCrime);
                  } // end foreach
    
              }  // end if
    
              Console.Write("Tap any key to exit. ");
              Console.ReadKey();
    
          }  // end Main
    
        }  // end class Program
    
    }  // end namespace
    
    


using System.Net;
using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName

namespace USCrime2006and2007
{
   class Program
   {
      public static void Main(string[] args)
      {
          IList<CityCrime> crimeList;  // CityCrime is the entity type returned by the service
          CrimeData crimeData = new CrimeData();

          crimeList = crimeData.GetCrimeData();

          if (crimeList != null)
          {
              Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}","Year",
                                                                      "City",
                                                                      "State",
                                                                      "Population",
                                                                      "Violent Crime");

              foreach (CityCrime c in crimeList)
              {
                  Console.WriteLine("{0,4} {1,-12} {2,-15} {3,10} {4,13}", c.Year, 
                                                                           c.City, 
                                                                           c.State, 
                                                                           c.Population,
                                                                           c.ViolentCrime);
              } // end foreach

          }  // end if

          Console.Write("Tap any key to exit. ");
          Console.ReadKey();

      }  // end Main

    }  // end class Program

    class CrimeData
    {
        private Uri serviceUri;
        private datagovCrimesContainer context;

        // constructor for the CrimeData class
        public CrimeData()
        {
            serviceUri = new Uri(SERVICE_ROOT_URL);
            context = new datagovCrimesContainer(serviceUri);
            context.IgnoreMissingProperties = true;
            context.Credentials = new NetworkCredential USER_ID,
                                                        SECURE_ACCOUNT_KEY); // Your Marketplace account key
        }  // end constructor
 
        // – public function that returns a list of crime data
        public IList<CityCrime> GetCrimeData()
        {
            IEnumerable<CityCrime> query = context.CityCrime.Where(crime => crime.City == "Newport").OrderBy(crime => crime.Year);
 
            try
            {
                return query.ToList();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return null;
            }  // end try

        }  // end function

    }  // end class CrimeData

}  // end namespace

Os metadados do conjunto de dados informa o intellisense à medida que você escreve seu código. Se o IDE não suportar o intellisense ou o intellisense não funcionar, você pode obter os metadados do serviço.

  1. Obtenha a URL raiz do serviço do conjunto de dados.
    Consulte a seção Obter a URL raiz do serviço acima para obter instruções sobre como obter a URL raiz do serviço.

  2. Adicione /$metadata ao final da URL raiz do seu serviço.
    Por exemplo, se a URL raiz do serviço for https://api.datamarket.azure.com/Data.ashx/fabrikam.com/inventory, a URL dos metadados é https://api. datamarket.azure.com/Data.ashx/fabrikam.com/inventory/$metadata.

  3. Navegue até a URL de metadados.

  4. Analise os metadados.
    Os seguintes metadados destinam-se ao conjunto de dados Crimes nos Estados Unidos entre 2006 e 2008 (https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes/$metadata).

    
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
    <edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:dr="http://schemas.microsoft.com/dallas/2010/04">   
       <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="1.0">      
          <Schema Namespace="data.gov.Crimes"xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
                  xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
                  xmlns="http://schemas.microsoft.com/ado/2007/05/edm">
             <EntityType Name="CityCrime">
                <Key>
                   <PropertyRef Name="ROWID" />
                </Key>
                <Property Name="ROWID" Type="Edm.Int32" Nullable="false" dr:Queryable="true" dr:Returned="true" />
                <Property Name="State" Type="Edm.String" Nullable="true" dr:Queryable="true" dr:Returned="true" />
                <Property Name="City" Type="Edm.String" Nullable="true" dr:Queryable="true" dr:Returned="true" />
                <Property Name="Year" Type="Edm.Int32" Nullable="false" dr:Queryable="true" dr:Returned="true" />
                <Property Name="Population" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="ViolentCrime" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="MurderAndNonEgligentManslaughter" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="ForcibleRape" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="Robbery" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="AggravatedAssault" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="PropertyCrime" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="Burglary" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="LarcenyTheft" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="MotorVehicleTheft" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
                <Property Name="Arson" Type="Edm.Int32" Nullable="false" dr:Queryable="false" dr:Returned="true" />
             </EntityType>
             <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
                <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
             </EntityContainer>
          </Schema>
       </edmx:DataServices>
    </edmx:Edmx>
    
    

    Exemplo de código 1 – XML de metadados

    Você conseguirá obter muitas informações úteis do esquema.

    • O nome do contêiner de entidade.
      <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
      Esse é o tipo de identificador context privado usado para autenticar o acesso ao serviço.


    • O nome e tipo do conjunto de entidades.
      <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
      Esse é o tipo de IEnumerable<T> e IList<T>.


    • A entidade e o tipo.
      <EntityType Name="CityCrime">
      Esse é o tipo usado na consulta e a variável de loop foreach (For Each).


    • O nome de cada campo que é retornado por uma consulta.
      Name=”State”


    • O tipo de dados de cada campo.
      Type=”Edm.String”


    • Se o campo pode ser nulo ou não.
      Nullable=”false”


    • Se um campo pode ser usado para filtrar os resultados da consulta.
      dr:Queryable=”true”
      dr:Queryable="false"
      Um campo de consulta pode ser usado em uma cláusula where (Where) da consulta. Campos que não podem ser consultados não podem ser usados em uma cláusula de consulta where (Where).


    • Se este campo é retornado ou não quando você consulta o conjunto de dados.
      dr:Returned=”true”

Mostrar:
© 2015 Microsoft