Exporter (0) Imprimer
Développer tout

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

Mis à jour: février 2014

 

 

Les références de service dans Visual Studio permettent de consommer par programmation des groupes de données Marketplace spécifiés comme groupes de données de requête flexible par le fournisseur de données.

ImportantImportant
Le code dans une référence de service ne doit pas être modifié sous peine d'entraîner un fonctionnement inapproprié et des effets secondaires. Par ailleurs, 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 ce n'est pas le cas, 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 groupe de données de requête flexible du service Marketplace que vous souhaitez utiliser dans votre application. Si vous n'êtes pas abonné à un groupe de données de requête flexible, suivez les instructions de la rubrique Abonnement à une offre de données.

 

Section Description

Étape 1 : création d'un projet dans Visual Studio

Procédure de démarrage d'un nouveau projet console pour le service Marketplace dans Visual Studio.

Étape 2 : ajout de la référence de service pour le service de données

Procédure d'ajout d'une référence de service pour consommer des données du service Marketplace.

Étape 3 : consommation des données avec un code managé

Code à écrire pour consommer un groupe de données de requête flexible du service Marketplace.

Code terminé

Application console complète en C# et VB.

Métadonnées

Exemple de métadonnées XML pour ce groupe de données de requête flexible.

  1. Dans le menu Démarrer, recherchez Visual Studio.

  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) à effectuer des modifications sur 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 utiliser Visual Basic).

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

    La valeur par défaut .NET Framework 4 est appliquée à Visual Studio 2010. Si vous utilisez une version antérieure de Visual Studio et .NET Framework 4 n'est pas installé sur votre ordinateur, accédez à la page de téléchargement de .NET Framework 4 pour télécharger et installer ce programme.

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

  5. Cliquez sur OK (OK)

  6. Ajoutez le code suivant dans la partie supérieure du fichier Program.cs (Program.vb) pour authentifier votre accès au groupe de données.

    using System.Net; // needed for authentication
    

Une fois que vous avez 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 consommer.

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

  2. Cliquez sur l'onglet My Data (Mes données).

  3. Recherchez le service de données 2006 - 2008 Crime in the United States.

  4. Cliquez sur Use (Utiliser) à droite du nom du groupe de données pour accéder à la page Details (Détails) correspondante.

  5. Faites défiler la page jusqu'à atteindre les onglets sous la mention Learn How to Use this Data in Visual Studio (Découvrir comment utiliser ces données dans Visual Studio).

  6. Cliquez sur l'onglet Details (Détails).

  7. Recherchez l'URL racine du service.


    Figure 1 – URL racine du service

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

  1. Revenez au projet Visual Studio.

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

  3. Dans le menu déroulant, sélectionnez Add Service Reference (Ajouter une référence de service).

  4. Collez l'URL racine du service depuis le Presse-papiers dans la liste déroulante Adresse.

  5. Cliquez sur Go (Aller).
    Patientez quelques instants jusqu'à ce que la zone de texte Services (Services) indique le service disponible pour votre projet.

  6. Entrez un nom d'espace de noms significatif dans la zone de texte Namespace (Espace de noms).
    Par exemple : DataGovCrimes.

  7. Cliquez sur OK (OK)
    Le nom de la référence de service apparaît sous Service References (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 la déclaration suivante pour rendre la référence de service accessible à votre application.

    noteRemarque
    Utilisez l'espace de noms du programme et l'espace de noms de la référence de service créés à l'étape 6 ci-dessus.

    using USCrime2006and2007.DataGovCrimes; // using ApplicationName.ServiceReferenceName
    

  1. Créez la classe publique CrimeData dans l'espace de noms de votre projet.

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

    • URI d'accès au service ;

    • conteneur de service stockant les informations d'identification de votre service dans le contexte du service.

      1. Accédez à la page Details (Détails).

      2. Cliquez sur Get Started with this Dataset (Commencer avec ce groupe de données).

      3. Cliquez sur l'onglet Overview (Vue d'ensemble).
        Le nom du jeu d'entités et le nom de la collection d'entités sont affichés.

    
    class CrimeData
    {
        private Uri serviceURI;
        private datagovCrimesContainer context;
    }  // end class CrimeData
    
    
  3. Créez un constructeur pour la classe CrimeData.
    Le constructeur initialise les variables privées et les informations d'identification de l'utilisateur.
    SERVICE_ROOT_URL correspond au lien HTTPS que vous avez copié dans le Presse-papiers. (Consultez la rubrique Obtention de l'URL racine du service.)
    context correspond au conteneur de service utilisé pour les informations d'identification de l'utilisateur.
    La propriété IgnoreMissingProperties est définie sur true pour que le client prenne en charge les propriétés ajoutées au type sur le serveur (pour plus d'informations, voir la documentation MSDN).
    USER_ID correspond à votre Live ID.
    SECURE_ACCOUNT_KEY correspond à la clé de compte Marketplace que vous utilisez pour cette application. (Consultez la rubrique Gestion de votre 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 qui renvoie une liste générique dans la classe. Pour notre programme, CityCrime est le type de liste générique.
    Cette méthode interroge le service et, en cas de succès, renvoie l'ensemble de résultats sous la forme d'une 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 éventuellement inclure le filtre where (Where) et/ou orderby (Order By).
    Pour plus d'informations sur les requêtes LINQ, consultez la page LINQ Query Expressions (C# Programming Guide) (LINQ in Visual Basic).
    Pour plus d'informations sur les limites des requêtes LINQ dans le service Marketplace, consultez la rubrique Options de requête OData prises en charge.

    Les requêtes LINQ suivantes sont valides dans le service 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 la classe CrimeData et la 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 groupe de données informent IntelliSense à mesure que vous écrivez le code. Si votre interface IDE ne prend pas en charge IntelliSense ou si IntelliSense ne fonctionne pas, vous pouvez obtenir les métadonnées à partir du service.

  1. Obtenez l'URL racine du service du groupe de données.
    Consultez la section Obtention de l'URL racine du service ci-dessus pour obtenir des instructions sur l'obtention de l'URL racine du service.

  2. Ajoutez /$metadata à la fin de l'URL racine du service.
    Par exemple, si l'URL racine du 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. Accédez à l'URL des métadonnées.

  4. Analysez les métadonnées.
    Les métadonnées suivantes correspondent au groupe de données 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>
    
    

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

    Le schéma permet d'obtenir bon nombre d'informations utiles :

    • nom du conteneur d'entités.
      <EntityContainer Name="datagovCrimesContainer" m:IsDefaultEntityContainer="true">
      Type de l'identifiant context privé utilisé pour authentifier l'accès au service.


    • nom et type du jeu d'entités.
      <EntitySet Name="CityCrime" EntityType="data.gov.Crimes.CityCrime" />
      Type des IEnumerable<T> et IList<T>.


    • entité et type.
      <EntityType Name="CityCrime">
      Type utilisé dans la requête et 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”


    • possibilité pour le champ d'avoir la valeur null.
      Nullable=”false”


    • possibilité pour un champ d'être utilisé pour filtrer les résultats d'une requête.
      dr:Queryable=”true”
      dr:Queryable="false"
      Un champ requêtable peut être utilisé dans la clause where (Where) d'une requête. Les champs non requêtables ne peuvent pas être utilisés dans la clause where (Where) d'une requête.


    • possibilité pour ce champ d'être renvoyé lors de l'interrogation du groupe de données.
      dr:Returned=”true”

Afficher:
© 2014 Microsoft