Partager via


Fournisseur LINQ to TerraServer, exemple

Mise à jour : novembre 2007

Cet exemple concerne un fournisseur LINQ personnalisé pour le service Web TerraServer USA. Il contient également une application cliente d'exemple qui utilise le fournisseur LINQ personnalisé pour demander des données géographiques au service Web.

Le service Web TerraServer-USA expose une méthode qui retourne des informations sur des lieux situés aux États-Unis lorsqu'une partie ou de la totalité d'un nom de lieu est fourni à cette méthode. Cette méthode, nommée GetPlaceListest la méthode que le fournisseur LINQ appelle pour obtenir les données sur lesquelles la requête LINQest exécutée. Le fournisseur utilise Windows Communication Foundation (WCF) pour communiquer avec le service Web. Pour plus d'informations sur le service Web TerraServer-USA, consultez Overview of the TerraServer-USA Web Services.

Un fournisseur LINQqui implémente l'interface IQueryable<T>, telle que le celle-ci, active l'écriture des requêtes LINQ dans la source de données à laquelle le fournisseur se connecte. Un fournisseur peut exécuter les fonctionnalités de requête sur les données elle-même, ou il peut traduire la requête LINQdans un langage de requête approprié à la source de données à laquelle il se connecte. Ce fournisseur obtient des données du service Web, puis modifie la requête d'origine de sorte que LINQto Objects gère l'exécution de la requête.

Note de sécurité :

Cet exemple de code est destiné à illustrer un concept ; il présente uniquement le code qui se rapporte spécifiquement à ce concept. Il est possible qu'il ne réponde pas aux exigences de sécurité d'un environnement spécifique, et ne doit pas être utilisé exactement comme indiqué. Nous vous recommandons d'ajouter du code de sécurité et de gestion des erreurs afin de renforcer la sécurité et la fiabilité de vos projets. Microsoft fournit cet exemple de code « EN L'ÉTAT » sans aucune garantie.

Pour obtenir des exemples et leurs instructions d'installation

  • Effectuez une ou plusieurs des opérations suivantes :

    • Dans le menu Aide, cliquez sur Exemples.

      Le fichier Readme contient des informations sur les exemples.

    • Visitez le site Web des exemples Visual Studio 2008 (page pouvant être en anglais). Vous y trouverez les versions les plus récentes des exemples.

Pour plus d'informations, consultez Recherche des fichiers d'exemple.

Remarque :

Cet exemple est disponible uniquement en ligne.

Pour exécuter l'application cliente dans Visual Studio

  1. Ouvrez le fichier LinqToTerraServerProvider.sln dans Visual Studio.

  2. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet LinqToTerraServerProvider, puis cliquez sur Générer.

  3. Dans le menu Déboguer, cliquez sur Exécuter sans débogage.

Configuration requise

Les composants suivants sont nécessaires pour exécuter cet exemple :

  • Visual Studio 2008

Démonstrations

Cet exemple montre comment implémenter IQueryable<T>, IOrderedQueryable<T> et IQueryProvider.

Décisions de conception

Le tableau suivant répertorie les fichiers dans le projet LinqToTerraServerProvider.

Fichier

Description

Evaluator.cs

Évalue partiellement l'arborescence d'expression de la requête. Cela traduit en valeurs toutes les références de variable locale dans la requête LINQ.

ExpressionTreeHelpers.cs

Contient des méthodes qui permettent de déterminer des informations concernant des types particuliers d'arborescence de l'expression et en extraire des données.

ExpressionTreeModifier.cs

Sous-classe de visiteur d'arborescence d'expression qui modifie l'arborescence de l'expression représentant la requête LINQ complète.

ExpressionVisitor.cs

Classe de visiteur d'arborescence d'expression.

InnermostWhereFinder.cs

Sous-classe de visiteur d'arborescence d'expression qui recherche l'expression dans l'arborescence de la requête représentant l'appel le plus profond à la méthode Where. Cette expression la plus profonde est l'expression à partir de laquelle le fournisseur extrait les emplacements de recherche.

InvalidQueryException.cs

Définit une exception levée lorsqu'une requête non valide est soumise.

LocationFinder.cs

Sous-classe de visiteur d'arborescence d'expression qui extrait des informations d'emplacement de la requête LINQ à utiliser dans la demande de service Web. Cette classe comprend des informations d'emplacement fournies dans l'un des formulaires suivants :

  • Une expression d'égalité, par exemple place.Name == "Seattle".

  • Une expression d'appel de méthode pour la méthode StartsWith, par exemple place.Name.StartsWith("Seat").

  • Une expression d'appel de méthode pour les méthodes Enumerable.Contains et List<T>.Contains, par exemple placeList.Contains(place.Name).

Place.cs

Définit un type .NET personnalisé pour représenter les données du service Web.

QueryableTerraServerData.cs

Contient le type sur lequel la requête cliente définit des requêtes. Ce type implémente IOrderedQueryable<T> pour prendre en charge des opérations de tri dans la requête. Étant donné que IOrderedQueryable<T> dérive de IQueryable<T>, en implémentant IOrderedQueryable<T> ce type implémente également IQueryable<T>.

TerraServerQueryContext.cs

Contient une classe qui organise la tâche d'exécution d'une requête.

TerraServerQueryProvider.cs

Contient le type qui implémente l'interface IQueryProvider. Les méthodes que cette interface définit sont appelées par les méthodes d'opérateur de requête standard définies dans Queryable pour exécuter la requête.

TypeSystem.cs

Cette classe d'assistance implémente une méthode utilisée pour fournir le type d'élément de la collection générique qui contient les résultats de la requête.

WebServiceHelper.cs

Obtient des données du service Web. Ce code contient deux contrôles qui améliorent la facilité d'utilisation de la bibliothèque du fournisseur. Le premier contrôle limite le délai maximum durant lequel une application cliente attendra une réponse en limitant à cinq le nombre total des appels faits au service Web, par requête. Le second contrôle détermine si le nombre de résultats retournés par le service Web est égal au nombre maximal des résultats qu'il peut retourner. Si le nombre de résultats est le nombre maximal, les résultats du service Web risquent d'être tronqués. Au lieu de retourner une liste incomplète au client, le fournisseur lève une exception.

Le tableau suivant répertorie les fichiers dans le projet ClientApp.

Fichier

Description

Program.cs

Contient trois exemples de requête LINQ qui interrogent le type QueryableTerraServerData défini dans le projet LinqToTerraServerProvider.

app.config

Contient un point de terminaison qui définit la façon dont l'application doit communiquer avec le service Web.

Pour une présentation détaillée de la conception de ce fournisseur LINQ personnalisé, consultez Procédure pas à pas : création d'un fournisseur LINQ IQueryable.

Voir aussi

Tâches

Comment : implémenter un visiteur de l'arborescence de l'expression

Autres ressources

Exemples LINQ en C#