Création d'une application de requête souple

Mis à jour: février 2014

 

Logo DataMarket

Utiliser les références du service dans Visual Studio pour consommer par programme des jeux de données du Marketplace que l'éditeur a spécifiés comme étant des jeux de données de requête souple.

ImportantImportant
Le code d'une référence de service ne doit pas être modifié, car toute modification peut entraîner un dysfonctionnement et des effets secondaires. De plus, les modifications sont remplacées à chaque actualisation de la référence de service.

Avant de continuer, vérifiez que vous disposez des éléments suivants :

  • Compte Windows Live ID valide. Si vous n'avez pas d'identifiant Live ID, accédez à la page d'accueil de Windows Live et inscrivez-vous.

  • Compte Marketplace valide. Si vous n’avez pas de compte Marketplace, suivez les instructions de la rubrique Création d'un compte Marketplace.

  • Abonnement au jeu de données de requête souple du Marketplace que vous souhaitez utiliser dans votre application. Si vous n’êtes pas abonné à un jeu de données de requête souple, suivez les instructions de la rubrique Abonnement à une offre de données.

 

Section Description

Étape 1 : créer votre projet dans Visual Studio

Étapes à suivre dans Visual Studio pour démarrer un nouveau projet de console pour le Marketplace.

Étape 2 : ajouter la référence de service pour votre service de données

Étapes à suivre pour ajouter une référence de service pour consommer des données du Marketplace.

Étape 3 : utiliser des données avec du code managé

Code que vous écrivez pour consommer un jeu de données de requête souple du Marketplace.

Code terminé

Application console complète en C# et VB.

Métadonnées

Exemple de métadonnées XML pour ce jeu de données de requête souple.

  1. Recherchez Visual Studio dans votre Menu Démarrer.

  2. Cliquez avec le bouton droit sur Visual Studio.

  3. Dans le menu déroulant, cliquez sur Exécuter en tant qu'administrateur.

  4. Lorsque vous êtes invité à autoriser ce programme (devenv.exe) pour apporter des modifications à votre ordinateur, cliquez sur Oui.

  1. Dans la page de démarrage de Visual Studio, sélectionnez Nouveau projet....

  2. Dans la boîte de dialogue Nouveau projet, sélectionnez Visual C# et Application Console (Visual Basic et Application Console si vous préférez Visual Basic).

  3. Dans la liste déroulante en haut de la boîte de dialogue Nouveau projet, sélectionnez .NET Framework 4.

    Dans Visual Studio 2010, .NET Framework 4 est sélectionné par défaut. Si vous utilisez une version antérieure de Visual Studio et que .NET Framework 4 n'est pas installé, accédez à la page de téléchargement de .NET Framework 4 pour le télécharger et l'installer.

  4. Donnez un nom significatif à votre projet. Par exemple, vous pouvez nommer ce projet USCrime2006and2007.

  5. Cliquez sur OK.

  6. Ajoutez en haut du fichier Program.cs (Program.vb) le code suivant qui est nécessaire pour authentifier l'accès au jeu de données.

    using System.Net; // needed for authentication
    

Après avoir démarré Visual Studio en tant qu'administrateur et créé une application console (Étape 1), ajoutez la référence de service pour le service de données que vous souhaitez utiliser.

  1. Accédez à la page d'accueil du Marketplace.

  2. Cliquez sur l'onglet Mes données.

  3. Recherchez le service de données Crimes aux États-Unis 2006-2008.

  4. Cliquez sur Utiliser à droite du nom de jeu de données. Vous accédez ainsi à la page Détails pour ce jeu de données.

  5. Faites défiler la page vers le bas jusqu'aux onglets sous Découvrez comment utiliser ces données dans Visual Studio.

  6. Cliquez sur l'onglet Détails.

  7. Recherchez l'URL racine du service.

    URL racine de service


    Figure 1 : URL racine du Service

  8. Copiez l'URL racine du service dans le Presse-papiers.

  1. Revenez à votre projet Visual Studio.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Références.

  3. Sélectionnez Ajouter une référence de Service... dans le menu déroulant.

  4. Collez l'URL racine du service à partir de votre Presse-papiers dans la liste déroulante Adresse.

  5. Cliquez sur Atteindre.
    Patientez quelques instants jusqu'à ce que la zone de texte Services affiche le service disponible pour votre projet.

  6. Entrez un nom significatif dans la zone de texte Espace de noms.
    Par exemple : DataGovCrimes.

  7. Cliquez sur OK.
    Le nom de votre référence de service s'affiche sous Références de service dans l'Explorateur de solutions.

  1. Sélectionnez Program.cs (Program.vb) dans le volet Code de Visual Studio.

  2. Ajoutez l'instruction suivante qui rend votre référence de service accessibles à votre application.

    noteRemarque
    Utilisez l'espace de noms du programme ainsi que le nom d'espace de noms de la référence service créé à l'étape 6 ci-dessus.

    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    

  1. Créez une classe publique, CrimeData, au sein de l'espace de noms de votre projet.

  2. Créez deux variables privées dans votre classe.

    • Un Uri pour le service.

    • Un conteneur de service qui stocke vos informations d'identification de service dans le contexte de service.

      1. Accédez à la page « Détails ».

      2. Cliquez sur Prise en main de ce jeu de données.

      3. Cliquez sur l'onglet Vue d'ensemble.
        Les noms de jeu d'entités et de collection d'entités s'affichent.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    }  // end class CrimeData
    
    
  3. Créez un constructeur pour la classe CrimeData.
    Le constructeur initialise les deux variables privées, ainsi que les informations d'identification de l'utilisateur.
    SERVICE_ROOT_URL est le lien https que vous avez copié dans votre Presse-papiers ci-dessus. (Consultez Obtenez l'URL racine du service.)
    context est le conteneur de service qui est utilisé pour les informations d'identification de l'utilisateur.
    La propriété IgnoreMissingProperties est définie sur true pour rendre le client fiable pour les propriétés ajoutées au type sur le serveur. (Voir Documentation MSDN pour plus d'informations.)
    USER_ID est votre identifiant Live ID.
    SECURE_ACCOUNT_KEY est la clé de compte Marketplace que vous utilisez pour cette application. (Consultez Gestion d'un compte 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. Créez une méthode publique dans votre classe, qui renvoie une liste générique. Pour notre programme, le type de liste générique est CityCrime.
    Cette méthode interroge le service et, en cas de réussite, renvoie le jeu de résultats sous forme de liste. Si la requête échoue pour une raison quelconque, la méthode renvoie la valeur 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 requête peut être toute requête LINQ Marketplace valide, et peut éventuellement inclure le filtre where (Where) et/ou orderby (Order By).
    Pour plus d'informations sur les requêtes LINQ, consultez Expressions de requête LINQ (Guide de programmation C#) (LINQ en Visual Basic).
    Pour plus d'informations sur les limitations de requête LINQ dans le Marketplace, consultez Options de requête OData prises en charge.

    Les requêtes LINQ suivantes sont valides dans le 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. Écrivez le code dans Main(), qui utilise vos classe CrimeData et méthode GetCrimeData() pour consommer les données et les afficher.

    
    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

Les métadonnées du jeu de données informent intellisense lorsque vous écrivez votre code. Si votre IDE ne prend pas en charge intellisense ou si intellisense ne fonctionne pas, vous pouvez obtenir les métadonnées du service.

  1. Obtenez l'URL racine du service du jeu de données.
    Pour savoir comment obtenir l'URL racine du service, consultez la section Obtenez l'URL racine du service ci-dessus.

  2. Ajoutez /$metadata à la fin de l'URL racine de votre service.
    Par exemple, si votre URL racine de service est https://api.datamarket.azure.com/Data.ashx/fabrikam.com/inventory, l'URL des métadonnées est https://api. datamarket.azure.com/Data.ashx/fabrikam.com/inventory/$metadata.

  3. Dans votre navigateur, accédez à l'URL des métadonnées.

  4. Analysez les métadonnées.
    Les métadonnées suivantes concernent le jeu de données Crimes aux États-Unis 2006-2008 (https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes/$ métadonnées).

    
    <?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>
    
    

    Exemple de code 1 : XML des métadonnées

    Vous pouvez obtenir de nombreuses informations utiles à partir du schéma.

    • Nom du conteneur d'entité.
      <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
      Il s'agit du type d'identificateur context privé utilisé pour authentifier l'accès au service.


    • Nom et type de jeu d'entités.
      <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
      Il s'agit du type de l'interface IEnumerable<T> et IList<T>.


    • Entité et type.
      <EntityType Name="CityCrime">
      Il s'agit du type utilisé dans votre requête et la variable de boucle foreach (For Each).


    • Nom de chaque champ renvoyé par une requête.
      Name=”State”


    • Type de données de chaque champ.
      Type=”Edm.String”


    • Indique si le champ peut être null ou non.
      Nullable=”false”


    • Indique si un champ peut être utilisé pour filtrer les résultats de requête.
      dr:Queryable=”true”
      dr:Queryable="false"
      Un champ interrogeable peut être utilisé dans une clause where (Where) de votre requête. Les champs ne pouvant pas être interrogés ne peuvent pas être utilisés dans une clause de requête where (Where).


    • Indique si ce champ est renvoyé lorsque vous interrogez le jeu de données.
      dr:Returned=”true”

Afficher: