Auteur : Dflying Chen ( http://dflying.cnblogs.com/ )
Dans l'article précédent (Appel d'un service Web dans ASP.NET Atlas - Création d'un mashup pour appeler un service Web distant (instance Yahoo! Weather)), j'ai présenté l'utilisation de BridgeRestProxy pour exécuter un mashup sur un service Web. Cependant, dans le développement réel, cette méthode simple ne suffit souvent pas. Nous devons écrire du code de programme pour compléter une logique complexe. Autrement dit, utilisez une classe proxy complexe personnalisée au lieu de celles intégrées dans Atlas ainsi que certaines balises XML dans le fichier asbx. Aujourd'hui, nous allons prendre un exemple plus complexe : Mashup le service de recherche de Google pour apprendre à utiliser une classe personnalisée pour proxyer les appels vers des services Web distants.
Tout d'abord, jetons un coup d'œil aux services fournis par Google : Google fournit à nous, développeurs, une série d'API, que vous pouvez consulter sur http://api.google.com/ . Pour l'API de recherche que nous allons utiliser aujourd'hui, vous pouvez également accéder à http://api.google.com/Apply for a Google License Key et inclure cette clé dans chaque demande adressée à Google. J'ai jeté un œil à la documentation de Google et elle indique que chaque clé de licence n'autorise que 1 000 requêtes par jour. Si vous devez utiliser la recherche Google sur un grand site Web, je crains que vous deviez préparer un tas de clés de licence. . Google est vraiment assez avare-_-b.
Après avoir demandé la clé de licence, nous pouvons commencer. Bien sûr, si c'est la première fois que vous entrez en contact avec Mashup, vous souhaiterez peut-être vous référer à mon article : Appel d'un service Web dans ASP.NET Atlas - Création d'un mashup. pour appeler le service Web distant (bases et exemples simples).
Tout d'abord, utilisez l'outil wsdl.exe fourni avec Visual Studio pour générer le code C# qui appelle le service Web Google en fonction de son adresse wsdl :
wsdl.exe http://api.google.com/GoogleSearch.wsdl
générera GoogleSearchService.cs Ajoutez-le au répertoire App_Code de notre site Web. À ce stade, nous pouvons réellement utiliser directement les classes de ce fichier, parmi lesquelles GoogleSearchService.doGoogleSearch() est la méthode dont nous avons besoin. Mais jetez un œil à cette classe désordonnée générée automatiquement. Elle contient de nombreuses autres méthodes, et la méthode doGoogleSearch() nécessite également de nombreux paramètres, nous devrions donc d'abord envelopper ce fichier désordonné, encapsuler et simplifier ses appels.
Dans cet exemple de programme, pour chaque résultat de recherche, il nous suffit d'obtenir ses champs Titre, URL et Snippet. Afin de réduire le trafic réseau, nous n'utilisons pas la classe de résultats de recherche fournie avec GoogleSearchService.cs, mais personnalisons une classe SearchResultLite qui contient uniquement le contenu dont nous avons besoin :
classe publique SearchResultLite
{
chaîne privée _title ;
chaîne publique Titre
{
obtenir { return _title }
définir { _titre = valeur }
}
chaîne privée _url ;
URL de chaîne publique
{
obtenir { retourner _url }
définir { _url = valeur }
}
chaîne privée _snippet ;
Extrait de chaîne publique
{
obtenir { return _snippet }
définir { _extrait = valeur }
}
public SearchResultLite()
{
}
public SearchResultLite (titre de la chaîne, URL de la chaîne, extrait de chaîne)
{
_titre = titre ;
_url = URL ;
_extrait = extrait de code ;
}
}
Notez que la classe SearchResultLite ci-dessus doit avoir un constructeur sans paramètre par défaut et que chaque champ doit utiliser des attributs au lieu de membres publics, sinon Atlas fera des erreurs lors du processus de conversion en objets JavaScript.
Terminons GoogleSearchService.doGoogleSearch() :
classe publique GoogleSearchWarpper
{
public SearchResultLite[] Recherche (chaîne lisenceKey, requête de chaîne)
{
GoogleSearchService s = new GoogleSearchService();
Résultat GoogleSearchResult = s.doGoogleSearch(
Clé de licence,
requête,
0,
10,
FAUX,
"",
FAUX,
"",
"",
""
);
List
foreach (élément ResultElement dans result.resultElements)
{
SearchResultLite resultLite = new SearchResultLite(elem.title, elem.URL, elem.snippet);
resultLites.Add(resultLite);
}
return resultLites.ToArray();
}
}
De cette façon, nous n'avons besoin que de deux paramètres lors de l'appel de la méthode Search, et il n'y a aucune partie redondante dans les données renvoyées. Enregistrez-le sous GoogleSearchWarpper.cs.
Ensuite, nous devons ajouter la clé de licence demandée au début au fichier web.config, qui sera utilisé dans les étapes suivantes :
Regardons la déclaration du fichier Bridge GoogleSearchBridge.asbx :
Notez que la valeur de l'attribut type de la section
la valeur de l'attribut value de licenseKey est définie sur % appsettings : GoogleWebAPILisenceKey % Il s'agit d'une nouvelle méthode d'écriture introduite dans le fichier asbx, ce qui signifie que sa valeur sera attribuée à la section appSettings du web. Le fichier de configuration au moment de l'exécution. La clé est la valeur de GoogleWebAPILisenceKey.
La requête sera transmise par le client et représente le mot-clé de la requête.
À ce stade, nous pouvons le tester dans la page Atlas. Bien sûr, la première étape consiste à ajouter ScriptManager à la page et une référence au Bridge ci-dessus :
Ajoutez un élément HTML pour permettre aux utilisateurs de saisir des mots-clés de requête, de déclencher des requêtes et d'afficher les résultats :
Enfin, écrivez JavaScript et vous pourrez voir l'utilisation de Sys.StringBuilder :
function btnSearch_onclick() {
var tbQuery = new Sys.UI.TextBox($("tbQuery"));
Dflying.GoogleSearch.Search({'query': tbQuery.get_text()}, onSearchComplete);
}
fonction onSearchComplete (résultat) {
var sbResult = new Sys.StringBuilder();
pour (var i = 0; i < result.length; ++i) {
sbResult.append("
L'exemple de programme peut être téléchargé ici :