Exportar (0) Imprimir
Expandir todo

Crear una aplicación de consultas flexibles

Actualizado: febrero de 2014

 

 

Use Referencias de servicio en Visual Studio para consumir mediante programación conjuntos de datos de Marketplace que el anunciante de datos ha especificado como conjuntos de datos de consultas flexibles.

ImportantImportante
El código de una referencia de servicio no debe modificarse, ya que esto podría provocar un funcionamiento incorrecto y efectos secundarios. Asimismo, las modificaciones se sobrescribirán cada vez que se actualice la referencia de servicio.

Antes de continuar, asegúrese de disponer de lo siguiente:

  • Una cuenta Windows Live ID válida. Si no dispone de un Live ID, vaya a la página de inicio de Windows Live y regístrese.

  • Una cuenta de Marketplace válida. Si no dispone de una cuenta de Marketplace, vaya a Crear la cuenta de Marketplace y siga las instrucciones que se indican.

  • Una suscripción al conjunto de datos de consultas flexibles de Marketplace que desee usar en la aplicación. Si no se ha suscrito a ningún conjunto de datos de consultas flexibles, vaya a Suscribirse a una oferta de datos y siga las instrucciones que se indican.

 

Sección Descripción

Paso 1: Crear el proyecto en Visual Studio

Pasos que se deben realizar en Visual Studio para iniciar un nuevo proyecto de consola para Marketplace.

Paso 2: Agregar la referencia de servicio para el servicio de datos

Pasos que se deben realizar para agregar una referencia de servicio y consumir datos de Marketplace.

Paso 3: Consumir datos con código administrado

Código que se escribe para consumir un conjunto de datos de consultas flexibles de Marketplace.

Código completado

Aplicación de consola completa en C# y VB.

Metadatos

Ejemplo de metadatos XML para este conjunto de datos de consultas flexibles.

  1. Busque Visual Studio en el menú Inicio.

  2. Haga clic con el botón secundario del mouse en Visual Studio.

  3. En el menú desplegable, haga clic en Ejecutar como administrador.

  4. Cuando se le solicite si desea permitir que este programa (devenv.exe) realice cambios en el equipo, haga clic en .

  1. En la página de inicio de Visual Studio, seleccione Nuevo proyecto…

  2. En el cuadro de diálogo Nuevo proyecto, seleccione Visual C# y Aplicación de consola (Visual Basic y Aplicación de consola si prefiere usar Visual Basic).

  3. En la lista desplegable izquierda de la parte superior del cuadro de diálogo Nuevo proyecto, seleccione .NET Framework 4.

    El valor predeterminado de Visual Studio 2010 es .NET Framework 4. Si usa una versión anterior de Visual Studio y no tiene .NET Framework 4 instalado, vaya a la página de descarga de .NET Framework 4 para descargar el programa e instalarlo.

  4. Asigne un nombre descriptivo al proyecto. Por ejemplo, a este proyecto le puede asignar el nombre USCrime2006and2007.

  5. Haga clic en Aceptar.

  6. Agregue el código siguiente en la parte superior de Program.cs (Program.vb), que se necesita para autenticar el acceso al conjunto de datos.

    using System.Net; // needed for authentication
    

Tras iniciar Visual Studio como administrador y crear una nueva aplicación de consola (Paso 1), agregue la referencia de servicio para el servicio de datos que desee consumir.

  1. Vaya a la página de inicio de Marketplace.

  2. Haga clic en la ficha My Data (Mis datos).

  3. Busque el servicio de datos 2006 - 2008 Crime in the United States.

  4. Haga clic en Use (Usar) a la derecha del nombre del conjunto de datos. Pasará a la página de detalles del conjunto de datos.

  5. Desplácese hacia abajo hasta llegar a las fichas debajo de Learn How to Use this Data in Visual Studio (Aprender a usar estos datos en Visual Studio).

  6. Haga clic en la ficha Details (Detalles).

  7. Busque la dirección Service root URL (URL raíz del servicio).


    Figura 1: dirección URL raíz del servicio

  8. Copie la dirección Service root URL (URL raíz del servicio) en el portapapeles.

  1. Vuelva al proyecto de Visual Studio.

  2. En el Explorador de soluciones, haga clic con el botón secundario en Referencias.

  3. Seleccione Agregar referencia de servicio… del menú desplegable.

  4. Pegue la dirección URL raíz del servicio del portapapeles en el campo desplegable Dirección.

  5. Haga clic en Ir.
    Espere unos momentos hasta que el cuadro de texto Servicios se rellene con el servicio disponible para el proyecto.

  6. En el cuadro de texto Espacio de nombres, especifique un nombre descriptivo para el espacio de nombres.
    Por ejemplo: DataGovCrimes.

  7. Haga clic en Aceptar.
    El nombre del servicio aparecerá bajo la sección Referencias de servicio en el Explorador de soluciones.

  1. Seleccione Program.cs (Program.vb) en el panel de códigos de Visual Studio.

  2. Agregue la instrucción siguiente, que permitirá que la referencia de servicio esté accesible para la aplicación.

    noteNota
    Use el espacio de nombres del programa más el nombre del espacio de nombres de referencia de servicio que creó en el paso 6 anterior.

    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    

  1. Cree una clase pública, CrimeData, dentro del espacio de nombres del proyecto.

  2. Cree dos variables privadas en la clase.

    • Agregue un URI al servicio.

    • Cree un contenedor de servicios que almacenará las credenciales de servicio en el contexto de servicio.

      1. Vaya a la página de detalles.

      2. Haga clic en Get Started with this Dataset (Comenzar a usar este conjunto de datos).

      3. Haga clic en la ficha Overview (Descripción general).
        Se muestran el nombre del conjunto de entidades y el nombre de la colección de entidades.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    }  // end class CrimeData
    
    
  3. Cree un constructor para la clase CrimeData.
    El constructor inicializa ambas variables privadas y las credenciales de usuario.
    La dirección SERVICE_ROOT_URL es el vínculo https que copió en el portapapeles anteriormente. (Vea Obtener la dirección URL raíz del servicio).
    El elemento context es el contenedor de servicios que se usa para las credenciales de usuario.
    La propiedad IgnoreMissingProperties se establece en true para que el cliente pueda aceptar las propiedades que se agregan al tipo en el servidor. (Consulte la documentación de MSDN para obtener información adicional).
    El elemento USER_ID es el Live ID.
    El elemento SECURE_ACCOUNT_KEY es la clave de cuenta de Marketplace que se usa para esta aplicación. (Consulte Administrar su cuenta de 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. Cree un método público de la clase que devuelva una lista genérica. Para este programa, el tipo de lista genérica es CityCrime.
    Este método consulta el servicio y, si se realiza correctamente, devuelve el conjunto de resultados como una lista. Si la consulta no se realiza correctamente por el motivo que sea, el método devuelve 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
    
    

    La consulta puede ser cualquier consulta LINQ Marketplace válida y, opcionalmente, puede incluir el filtro where (Where) u orderby (Order By).
    Para obtener más información sobre las consultas LINQ, vea Expresiones de consultas LINQ (Guía de programación de C#) (LINQ en Visual Basic).
    Para obtener información sobre las limitaciones de las consultas LINQ en Marketplace, vea Opciones de consultas OData admitidas.

    Las siguientes consultas LINQ son válidas en 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. Escriba el código en Main() que usa la clase CrimeData y el método GetCrimeData() para consumir los datos y mostrarlos.

    
    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

Los metadatos del conjunto de datos notifican a Intellisense a medida que escriba el código. Si el IDE no admite Intellisense o Intellisense no funciona, puede obtener los metadatos desde el servicio.

  1. Obtenga la dirección URL raíz del servicio del conjunto de datos.
    Consulte la sección Obtener la dirección URL raíz del servicio para obtener instrucciones sobre cómo obtener la dirección URL raíz del servicio.

  2. Agregue /$metadata al final de la dirección URL raíz del servicio.
    Por ejemplo, si la dirección URL raíz del servicio es https://api.datamarket.azure.com/Data.ashx/fabrikam.com/inventory, la dirección URL de los metadatos es https://api. datamarket.azure.com/Data.ashx/fabrikam.com/inventory/$metadata.

  3. Con el explorador, vaya a la dirección URL de metadatos.

  4. Analice los metadatos.
    Los metadatos siguientes corresponden al conjunto de datos 2006 - 2008 Crime in the United States (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>
    
    

    Ejemplo de código 1: XML de los metadatos

    Es posible obtener una gran cantidad de información útil del esquema.

    • El nombre del contenedor de entidades.
      <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
      Este es el tipo del identificador context privado que se usa para autenticar el acceso al servicio.


    • El nombre y tipo del conjunto de entidades.
      <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
      Este es el tipo de IEnumerable<T> e IList<T>.


    • La entidad y el tipo.
      <EntityType Name="CityCrime">
      Este es el tipo que se usa en la consulta y en la variable de bucle foreach (For Each).


    • El nombre de cada campo que devuelve la consulta.
      Name=”State”


    • El tipo de datos de cada campo.
      Type=”Edm.String”


    • Permite indicar si el campo puede ser nulo o no.
      Nullable=”false”


    • Permite indicar si un campo se puede usar o no para filtrar los resultados de la consulta.
      dr:Queryable=”true”
      dr:Queryable="false"
      Un campo consultable se puede usar en una cláusula where (Where) de la consulta. Los campos que no se pueden consultar no se pueden usar en una cláusula where (Where) de la consulta.


    • Permite indicar si este campo se devuelve o no cuando se consulte el conjunto de datos.
      dr:Returned=”true”

Mostrar:
© 2014 Microsoft