Construction de votre propre bibliothèque de recherche avec Office 2003 et l'API du service Web de Google

Chris Kunicki
OfficeZealot.com

Résumé : Chris Kunicki traite de la création d'une bibliothèque de recherche, une toute nouvelle fonctionnalité de Microsoft Office 2003 qui permet d'effectuer une recherche facile de ressources externes depuis Office.

Téléchargez GoogleResearchLibrarySource.exe.

Notez que les commentaires du programmeur sont en anglais dans les exemples de fichiers programmes, alors qu'ils sont traduits dans l'article en lui-même afin d'en faciliter la compréhension.

**Remarque   ** Les informations de cet article sont basées sur Office 2003 version bêta 2. Comme toujours, elles sont sujettes à modification. J'ai fait tout mon possible pour me concentrer sur des choses qui seront, je l'espère, encore vraies lors de l'expédition du produit.

Dans mon dernier article, What's New with Smart Tags in Office 2003 (Quitter le site MSDN France Site en anglais) et, à mon grand plaisir, j'ai abordé le thème des balises actives sous Office et j'ai reçu de très nombreux commentaires positifs et enthousiastes témoignant d'un intérêt pour la prochaine version de Microsoft Office, appelée officiellement Microsoft Office 2003. De nombreux lecteurs sont impatients d'essayer la version bêta 2. Un conseil : renseignez-vous auprès du Centre de développement Office pour savoir comment se procurer la version bêta 2.

Personnellement, je travaille sur les bêtas depuis plusieurs mois et je dois vous dire qu'il s'agira d'une nouvelle version d'Office impressionnante. Il est difficile de savoir par où commencer. Des nouvelles fonctionnalités séduiront les utilisateurs, les entreprises et les vendeurs de logiciel indépendants. Du fait de toute cette excitation, je vais passer les prochains mois à travailler sur les nouvelles fonctionnalités et, de manière plus importante, sur les types de solutions disponibles avec Microsoft Office 2003.

Présentation de la bibliothèque de recherche

Ce mois-ci, je partagerai avec vous ce que je considère comme l'un des trésors cachés de Microsoft Office 2003 :la bibliothèque de recherche. En raison de la quantité de thèmes plus intéressants à aborder en ce qui concerne Office 2003, la bibliothèque a été beaucoup moins mise en avant. La bibliothèque de recherche sera disponible dans la prochaine version de Microsoft Word, Microsoft Excel, Microsoft PowerPoint®, Microsoft Outlook®, Microsoft Publisher, Microsoft OneNote(tm) et Internet Explorer. Elle est accessible en tant que volet Office dans chacune de ces applications.

Qu'est-ce que la bibliothèque de recherche ? Comme son nom l'indique, il s'agit d'un outil de recherche intégré permettant aux utilisateurs d'effectuer des recherches dans différentes sources d'informations depuis Office. Certaines de ces sources de recherche sont intégrées à Office, tandis que d'autres sont des services externes, nécessitant par conséquent une connexion à Internet pour les utiliser. La Figure 1 illustre le fonctionnement du service de recherche Thesaurus anglais.

Volet Office de recherche dans Microsoft Word 2003

Figure 1. Volet Office de recherche dans Microsoft Word 2003

En examinant le volet Office Research comme dans la Figure 1, nous apercevons les éléments suivants :

  1. Dans la plupart des applications prises en charge, vous pouvez accéder à la bibliothèque de recherche en cliquant sur le bouton Research de la barre d'outils Standard. En outre, vous pouvez accéder au volet Office Research en ouvrant le volet Office (View | Task Pane), puis en sélectionnant Research dans la liste des volets Office disponibles.
  2. Une fois le volet Office de recherche ouvert, entrez le texte de la recherche dans la zone de texte Search for. Vous pouvez également appuyer sur ALT et cliquer sur le texte dans un document. Dans ce cas, l'application Office ouvre le volet Office et insère le texte dans la zone de texte Search for.
  3. Sélectionnez ensuite un service de recherche dans la liste des services. Tout au long de cet article, j'énumérerai certains de ces services. Pour finir, cliquez sur le bouton Go (bouton vert avec la flèche) pour lancer la recherche.
  4. Le volet Office Research est doté d'un bouton Back et Forward identique à un navigateur Web pour visualiser de nouveau les recherches précédentes.
  5. Le volet Office Research affiche les résultats de la recherche. Plusieurs services peuvent être utilisés dans une seule recherche et les résultats sont alors séparés par un en-tête propre à chaque service de recherche.
  6. Le volet Office Research prend en charge plusieurs types de contrôle. Dans la Figure 1, vous pouvez voir un menu déroulant qui permet l'insertion ou la copie du texte sélectionné dans le document courant.
  7. En bas du volet Office Research, vous remarquerez le lien Research options.... Ce lien permet d'ouvrir la boîte de dialogue Research Options comme illustré à la Figure 2.

Boîte de dialogue Research Options permettant de configurer les services de recherche utilisés par Office

Figure 2. Boîte de dialogue Research Options permettant de configurer les services de recherche utilisés par Office

La boîte de dialogue Research Options est utilisée pour ajouter de nouveaux services de recherche, mettre à jour les services existants, modifier les contrôles parentaux et réviser les propriétés des services installés. Comme vous pouvez le voir dans la Figure 2, Office 2003 version bêta 2 est expédié avec certains services de recherche. La liste suivante énumère certains de ces services :

  • Sources locales sur la machine
    • Thesaurus and Translation
  • Services de recherche d'Office 2003
    • Dictionary
    • Encyclopedia
    • Web Search
    • Stock Quotes
  • Services de recherche tiers
    • Factiva
    • eLibrary
    • Gale
    • WorldLingo
    • et d'autres à venir

La plupart de ces services nécessitent une connexion à Internet. Si l'utilisateur n'est pas connecté, il ne pourra pas utiliser certains services de recherche. Les services de recherche sur Internet fournissent des informations actuelles et précises depuis de nombreuses ressources utiles du Web. L'un de mes services de recherche préférés est MSN Money Stock Quotes. La Figure 3 illustre les résultats de la recherche concernant le marché boursier MSFT.

 Exemple d'utilisation du service de recherche MSN Money Stock Quotes

Figure 3. Exemple d'utilisation du service de recherche MSN Money Stock Quotes

Lorsque vous comparez les résultats de la Figure 1 et de la Figure 3, illustrant deux services de recherche différents, vous commencez à avoir une idée de la flexibilité d'affichage capable de gérer des types de données très divers. MSN Money Stock Quotes affiche une table formatée, des liens hypertexte qui conduisent au site Web MSN pour la création de graphiques, et un bouton appelé Insert Stock Price. Le bouton Insert Stock Price est en fait une balise active. Les volets Office Research peuvent utiliser les actions des balises actives installées pour optimiser l'interactivité entre le volet Office Research et l'application Office. Dans ce cas, MSN Money Stock Quotes peut insérer la cotation en cours ou une table formatée avec les statistiques courantes de la bourse.

Construction de votre propre service de bibliothèque de recherche

Je vous ai gardé le meilleur pour la fin : le volet Office Research est extensible. Microsoft livrera un kit de développement de logiciels (SDK) Office Research avec la version bêta 2 et la version finale du produit. Ceci permettra aux développeurs d'intégrer des produits tiers et des informations système internes, et aux vendeurs de logiciel indépendants d'intégrer leur ligne de produits dans l'environnement de Microsoft Office.

Dans le reste de l'article, j'aborderai les bases de la construction d'un service de bibliothèque de recherche. L'exemple est basé sur les API Web de Google, qui correspondent à une série de services Web XML permettant à un développeur de logiciels d'interroger plus de 3 milliards de documents Web directement depuis sa propre application. Dans notre cas, nous effectuerons une recherche sur Google depuis le volet Office Research. Pour obtenir davantage d'informations sur l'utilisation des API Web de Google, consultez le site http://www.google.com/apis/ (Quitter le site MSDN France Site en anglais).

Quel est le scénario pour le service de bibliothèque de recherche Google ? Souvent, je lance Internet Explorer et je vais sur Google pour rechercher des informations déjà saisies dans le document ou l'e-mail sur lequel je travaille. Désormais, je peux effectuer une recherche directement depuis Office à l'aide de l'exemple de code dont je vais parler plus loin. Je peux appuyer sur ALT et cliquer sur un ou plusieurs mots d'un e-mail. Le volet Office Research s'ouvre avec le texte de ma recherche déjà saisi dans la zone de texte Search for. Je sélectionne le service de recherche Web Google, puis lance la recherche. Le volet Office Research affiche les résultats de ma recherche. Je clique ensuite sur l'un des résultats et le site Web est chargé dans le navigateur. La Figure 4 donne un aperçu de la bibliothèque de recherche Google Web Search.

Aperçu de la bibliothèque de recherche Google Web Search
Figure 4. Aperçu de la bibliothèque de recherche Google Web Search

Le fichier à télécharger accompagnant cet article contient le service de bibliothèque de recherche Google Web Search, testé sous Office 2003 version bêta 2. Deux versions existent : l'une écrite en C# et une autre en Visual Basic® .NET. Mis à part la syntaxe utilisée, les versions sont identiques. Un autre point intéressant : j'ai écrit tout d'abord en C#, puis converti en Visual Basic .NET. Cette conversion m'a pris environ 10 minutes, ce qui prouve qu'il n'est pas difficile de passer d'un langage à un autre. En ce qui concerne l'espace, j'utiliserai essentiellement l'exemple C# pour les références de code dans cet article.

Enfin, pour accéder au service des API Web de Google, créez un compte Google et procurez-vous une clé de licence GRATUITE. Votre compte Google et votre clé de licence vous autorisent jusqu'à 1 000 requêtes automatiques par jour. Vous pouvez demander cette clé à l'adresse http://www.google.com/apis/ Quitter le site MSDN France Site en anglais. Cette opération ne prend que quelques minutes. Puis, selon la version du langage du code source que vous allez utiliser, ouvrez web.config et modifiez la propriété personnalisée GoogleKey. Vous trouverez ci-dessous les répertoires et les versions du langage :

<<Unzip Directory>>\GoogleResearchLibraryCSharp - C# Version 
<<Unzip Directory>>\GoogleResearchLibraryVBNet - VB.NET Version

Entrez la clé de licence qui vous a été affectée par Google dans l'attribut de valeur :

<add key="GoogleKey" value="[INSERT YOUR KEY HERE - SEE README]"/>

Par exemple, le nœud XML modifié doit ressembler à ce qui suit :

<add key="GoogleKey" value="abc123ThisIsAMadeUpKeyxyz/abc"/>

Pour obtenir davantage d'informations sur l'installation, consultez le fichier README.DOC inclus.

Fondements de l'architecture de la bibliothèque de recherche

La bibliothèque de recherche comprend essentiellement un service Web XML, ainsi que deux méthodes Web. Ceci est une nouveauté par rapport aux nombreux autres modèles d'extensibilité Office. Auparavant, l'extension d'Office nécessitait souvent l'installation de bits sur le client. Le service de bibliothèque de recherche est un service Web XML standard qui ne requiert pas de code côté client, sauf si vous avez l'intention d'utiliser une balise active (ce qui est totalement facultatif étant donné que de nombreuses bibliothèques de recherche n'utilisent pas de balises actives). À l'aide de Visual Studio® .NET ou d'une autre plate-forme activée par le service Web XML, créez une série de services Web s'exécutant sur un serveur et communiquant avec Office via des interfaces prédéfinies. La Figure 5, provenant du SDK Office Research, illustre le flux de communication entre Office et le service Web XML de la bibliothèque de recherche.

Figure 5. Flux de communication entre Office et le service Web XML de la bibliothèque de recherche

  1. Un utilisateur sélectionne le bouton Add Service dans la boîte de dialogue Research Options (Figure 2). Il fournit le lien vers la page Registration du service de bibliothèque de recherche. La page d'inscription comporte une méthode Web appelée Registration().

  2. Registration() renvoie des informations sur le fournisseur du service de recherche, le type de service, ainsi que la catégorie de service et les pointeurs pour la méthode Web Query() utilisée au cours de la recherche. Désormais, le service peut être utilisé.

    **Remarque   ** Vous pensez peut-être que cela demande aux utilisateurs trop d'opérations à effectuer. Ils risquent de laisser tomber l'ajout de service. Il existe cependant d'autres options : (1) Vous pouvez déployer un fichier d'installation qui installe les entrées de registre appropriées pour la bibliothèque de recherche ou (2) Office inclut un mécanisme de découverte pour l'ajout et la mise à jour de services de bibliothèque de recherche. Lorsqu'une entreprise déploie Office 2003, elle peut intégrer un pointeur lors de l'installation vers des services Web XML de découverte. Ceci permet d'ajouter de nouveaux services sans requérir l'intervention de l'utilisateur au niveau du bureau.

  3. Les requêtes de l'utilisateur provenant de la bibliothèque de recherche sont envoyées à la méthode Web Query() du service de bibliothèque de recherche utilisé.

  4. La méthode Query() analyse la requête et formule une réponse. La réponse est renvoyée à Office, qui affiche ensuite les résultats.

La communication entre Office et le service Web XML de recherche doit être conforme à une série de schémas XML définis dans le SDK Office Research. Par exemple, le paquet de réponse d'inscription basé sur le schéma de réponse peut ressembler à ce qui suit :

<?xml version="1.0" encoding="utf-8"?>
<ProviderUpdate xmlns="urn:Microsoft.Search.Registration.Response">
 <Status>SUCCESS</Status>
 <Providers>
 <Provider>
 <Message>This is a sample research library </Message>
 <Id>{9FF837AF-34D6-4a94-BB52-B0F19F3A343A}</Id>
 <Name>OfficeZealot.com</Name>
 <QueryPath>
 https://localhost/googleresearchlibrarycsharp/Query.asmx
 </QueryPath>
 <RegistrationPath>
 https://localhost/googleresearchlibrarycsharp/registration.asmx<
 </RegistrationPath>
 <AboutPath/>
 <Type>SOAP</Type>
 <Services>
 <Service>
 <Id>{CD144577-9D90-4144-AE38-0D6553CA4004}</Id>
 <Name>Google Web Search (CSharp)</Name>
 <Description>Google Web Service research library</Description>
 <Copyright>All content Copyright OfficeZealot.com (c) 
 2003.</Copyright>
 <Display>On</Display>
 <Category>RESEARCH_GENERAL</Category>
 </Service>
 </Services>
 </Provider>
 </Providers>
</ProviderUpdate> 

Ces informations sont communiquées à l'utilisateur lorsqu'il installe le service de bibliothèque de recherche. Ce code contient également les informations dont Office se sert pour savoir comment communiquer avec le service de bibliothèque de recherche sur le serveur distant.

Zoom sur le service Web XML

Comme indiqué plus haut, une bibliothèque de recherche comprend essentiellement un service Web XML, ainsi que deux méthodes Web. Ces deux méthodes Web peuvent coexister dans un seul fichier de service Web. Cependant, je préfère les séparer logiquement et physiquement pour simplifier le code. Par conséquent, le service de recherche Google Web Service comporte deux fichiers clés :

  1. Le fichier du service Web Registration.asmx pour la méthode Registration()
  2. Le fichier du service Web Query.asmx pour la méthode Web Query()

Dans Office, ces méthodes Web répondent en fonction des schémas de la bibliothèque de recherche et de leur espace de noms correspondant. Par conséquent, chaque service Web XML doit être défini avec l'espace de noms approprié pour une réponse, qui est urn:Microsoft.Search. Dans C#, utilisez l'attribut suivant pour la définition du service Web :

[WebService(Namespace="urn:Microsoft.Search")]

Pour Visual Basic .NET :

<WebService(Namespace:="urn:Microsoft.Search")>

Ce code indique à .NET Framework d'inclure les corps de message SOAP dans l'espace de noms urn:Microsoft.Search.

Ce qui suit correspond au code C# pour la méthode Web Registration() stockée dans Registration.asmx.cs.

[WebMethod(CacheDuration=86400)] //Cache this for a full day, this rarely 
changes (86400 seconds = 24 Hours)
public string Registration(string registrationxml)
{
 string physicalPath = 
 HttpContext.Current.Server.MapPath(".").ToString();
 string httpPath = 
 ConfigurationSettings.AppSettings["ServerPath"] 
 + HttpContext.Current.Request.ApplicationPath + "/";

 XmlDocument registrationResponse = new XmlDocument();
 registrationResponse.Load(physicalPath + 
 "\\RegistrationResponse.xml");
 
 XmlNamespaceManager nsm = 
 new XmlNamespaceManager(registrationResponse.NameTable);
 nsm.AddNamespace("ns", "urn:Microsoft.Search.Registration.Response");

 registrationResponse.SelectSingleNode("//ns:QueryPath", nsm).InnerText = 
 httpPath + "Query.asmx";
 registrationResponse.SelectSingleNode("//ns:RegistrationPath", 
 nsm).InnerText = httpPath + "Registration.asmx";
 registrationResponse.SelectSingleNode("//ns:AboutPath", nsm).InnerText =
 httpPath + "about.asmx";

 return registrationResponse.InnerXml.ToString();
}

La réponse d'inscription est relativement simple, étant donné qu'elle définit uniquement les informations sur le service de bibliothèque de recherche. Le code charge un fichier XML local appelé RegistrationResponse.xml qui fonctionne comme un modèle global pour la réponse et insère des informations supplémentaires déterminées au moment de l'exécution. Il est renvoyé à Office.

Vous trouverez ci-dessous le code pour la méthode Web Query() et l'une de ses fonctions privées dépendantes :

[WebMethod(CacheDuration=3600)] //Cache for 1 hour
public string Query(string queryXml)
{
 //Verify that a query value has been specified
 if (queryXml.Length == 0)
 return "";

 string queryString;
 string applicationName;
 int startAt = 1;

 XmlDocument requestXml = new XmlDocument();
 try
 {
 requestXml.LoadXml(queryXml.ToString());

 XmlNamespaceManager nsmRequest = 
 new XmlNamespaceManager(requestXml.NameTable);
 nsmRequest.AddNamespace("ns", "urn:Microsoft.Search.Query");
 nsmRequest.AddNamespace("oc", 
 "urn:Microsoft.Search.Query.Office.Context");

 queryString = requestXml.SelectSingleNode("//ns:QueryText", 
 nsmRequest).InnerText;
 applicationName = requestXml.SelectSingleNode("//oc:Name", 
 nsmRequest).InnerText;
 try
 {
 startAt = Convert.ToInt32(requestXml.SelectSingleNode("//ns:StartAt", 
 nsmRequest).InnerText.ToString());
 }
 catch
 {
 startAt = 1;
 }
 }
 catch
 {
 //Parsing queryXML has failed, use the input string for the google search
 queryString = queryXml;
 }
 
 XmlDocument responseWrapper = new XmlDocument();
 try
 {
 responseWrapper.Load(physicalPath + "\\ResponseWrapper.xml");
 }
 catch
 {
 //Cannot parse the response body wrapper, return nothing
 return "";
 }
 XmlNamespaceManager nsmResponse = 
 new XmlNamespaceManager(responseWrapper.NameTable);
 nsmResponse.AddNamespace("ns", "urn:Microsoft.Search.Response");

 responseWrapper.SelectSingleNode("//ns:Range",nsmResponse).InnerXml = 
 QueryGoogle(queryString, startAt);
 return responseWrapper.InnerXml.ToString();
}

private string QueryGoogle(string queryString, int startAt)
{
 StringWriter queryResponse = new StringWriter();
 XmlTextWriter writer = new XmlTextWriter(queryResponse);

 GoogleSearchService search = new GoogleSearchService();
 try 
 {
 // Invoke the search method
 GoogleSearchResult results = 
 search.doGoogleSearch(ConfigurationSettings.AppSettings["GoogleKey"] , 
 queryString, startAt, PageCount, true, "", true, "", "", "");

 //Elements for Previous | Next links
 writer.WriteElementString("StartAt",startAt.ToString());
 writer.WriteElementString("Count",PageCount.ToString());
 writer.WriteElementString("TotalAvailable", 
 results.estimatedTotalResultsCount.ToString());

 //Start Results Element
 writer.WriteStartElement("Results");
 //Start Content element
 writer.WriteStartElement("Content", 
 "urn:Microsoft.Search.Response.Content");

 //Insert Image
 writer.WriteStartElement("Image");
 writer.WriteAttributeString("source", httpPath + "/gLogo.gif");
 writer.WriteEndElement();

 foreach(ResultElement result in results.resultElements)
 {
 writer.WriteStartElement("Heading");
 writer.WriteAttributeString("collapsible","true");
 
 if (result.title.Length> 0)
 writer.WriteElementString("Text", 
 StripHtml(result.title).Trim());
 else
 writer.WriteElementString("Text", "No Title");

 if (result.snippet.Length > 0)
 writer.WriteElementString("P",
 StripHtml(result.snippet));

 if (result.summary.Length>0)
 {
 writer.WriteStartElement("P");
 writer.WriteStartElement("Char");
 writer.WriteAttributeString("light", "true");
 writer.WriteString("Description: ");
 writer.WriteEndElement();
 writer.WriteString(StripHtml(result.summary));
 writer.WriteEndElement();
 }

 writer.WriteStartElement("Hyperlink");
 writer.WriteAttributeString("url", result.URL);
 writer.WriteElementString("Text", result.URL);
 writer.WriteEndElement();

 writer.WriteEndElement(); //Heading
 }

 writer.WriteElementString("HorizontalRule","");
 writer.WriteStartElement("Hyperlink");
 writer.WriteAttributeString("url", 
 "http://www.google.com/search?q=" + queryString);
 writer.WriteElementString("Text", 
 "Continue your search at Google.com ...");
 writer.WriteEndElement();
 writer.WriteStartElement("Hyperlink");
 writer.WriteAttributeString("url", 
 "http://groups.google.com/groups?q=" + queryString);
 writer.WriteElementString("Text", 
 "Search at groups.Google.com ...");
 writer.WriteEndElement();
 //Overview of search results
 writer.WriteElementString("P", "Search took " + 
 Math.Round(results.searchTime,2).ToString() + " seconds.");
 writer.WriteElementString("HorizontalRule","");
 writer.WriteStartElement("Image"); //Insert OZ logo Image
 writer.WriteAttributeString("source", httpPath + "/oz15owide.gif");
 writer.WriteEndElement();

 writer.WriteEndElement(); //Close Content element
 writer.WriteEndElement(); //Results Content element

 writer.Close();

 return queryResponse.ToString();
 }
 catch (System.Web.Services.Protocols.SoapException ex) 
 {
 return "";
 }
}

Lorsqu'un utilisateur lance une requête pour obtenir des informations via le volet Office Research, la requête est empaquetée en fonction du schéma pour une demande de requête. Ces informations sont ensuite transférées à la méthode Web Query() et peuvent être analysées dans le paramètre queryXml. Query() récupère le terme de la recherche dans queryXml, puis transfère le terme de la recherche à la fonction QueryGoogle().

QueryGoogle() Dans ce cas, QueryGoogle() effectue en fait le plus gros du travail. Il appelle l'API du service Web de Google en utilisant le terme de la recherche comme paramètres d'entrée. La réponse de Google est ensuite analysée et rempaquetée selon le schéma de réponse de la bibliothèque de recherche. Le paquet XML suivant est un exemple de la réponse illustrée à la Figure 4 :

<?xml version="1.0" encoding="utf-8"?>
<ResponsePacket revision="1" xmlns="urn:Microsoft.Search.Response">
<Response domain="{CD144577-9D90-4144-AE38-0D6553CA4004}">
 <Range>
 <StartAt>1</StartAt>
 <Count>2</Count>
 <TotalAvailable>738</TotalAvailable>
 <Results>
 <Content xmlns="urn:Microsoft.Search.Response.Content">
 <Image source="https://localhost/GoogleResearchLibraryCSharp//gLogo.gif"/>
 <Heading collapsible="true">
 <Text>Smart Solutions Opinion</Text>
 <P>Office as Swiss Army Knife. Chris Kunicki.. </P>
 <Hyperlink url="http://www.msofficemag.net/opinion/default.asp?sort=W&amp;Ord=A">
 <Text>http://www.msofficemag.net/opinion/default.asp?sort=W&amp;Ord=A</Text>
 </Hyperlink>
 </Heading>
 <Heading collapsible="true">
 <Text>What's New with Smart Tags in Office 11</Text>
 <P>Rate this page: 4 users, 3.8 out of 5. Read User ... </P>
 <Hyperlink url="https://msdn.microsoft.com/columns/office.asp">
 <Text>https://msdn.microsoft.com/columns/office.asp</Text>
 </Hyperlink>
 </Heading>
 <HorizontalRule/>
 <Hyperlink url="http://www.google.com/search?q=Chris Kunicki">
 <Text>Continue your search at Google.com ...</Text>
 </Hyperlink>
 <Hyperlink url="http://groups.google.com/groups?q=Chris Kunicki">
 <Text>Search at groups.Google.com ...</Text>
 </Hyperlink>
 <P>Search took 0.19 seconds.</P>
 <HorizontalRule/>
 <Image source="https://localhost/GoogleResearchLibraryCSharp//oz15owide.gif"/>
 </Content>
 </Results>
 </Range>
 <Status>SUCCESS</Status>
 </Response>
</ResponsePacket>

Query.asmx utilise considérablement l'objet XMLTextWriter. Cet objet permet une construction très efficace et peu encombrante d'un document XML bien conçu. Étant donné que la réponse de l'interface Query est basée sur le XML structuré du schéma, il est important que le document soit bien conçu, sinon le volet Office Research risque d'afficher un volet vide. L'exemple suivant illustre l'utilisation de l'objet XMLTextWriter :

writer.WriteStartElement("P");
writer.WriteStartElement("Char");
writer.WriteAttributeString("light", "true");
writer.WriteString("Description: ");
writer.WriteEndElement();
writer.WriteString(StripHtml(result.summary));
writer.WriteEndElement();

Puis, crée le XML suivant :

<P><Char light="True">Description: information from google</Char></P>

À première vue, la quantité de code nécessaire pour créer une chaîne XML simple peut sembler considérable. Cependant, un paquet de réponse classique peut comporter de 50 à 100 lignes de XML, ce qui s'avère relativement difficile à gérer avec des routines de gestion de chaînes génériques. L'objet XMLTextWriter permet non seulement de construire le paquet de réponse de cet XML sans consommer trop de mémoire, mais simplifie également, grâce au code, les tâches de création et de gestion.

Remarques

Comme vous pouvez l'imaginer, nous n'avons pu qu'effleurer toutes les fonctionnalités. En tant que premier utilisateur de cette nouvelle technologie, j'aimerais, dans ces derniers paragraphes, partager avec vous quelques observations sur la création d'un volet Office de recherche.

Cette expérience est similaire à l'apprentissage du HTML, étant donné que la bibliothèque de recherche est une réponse transmise via un service Web formaté en structure XML définie par Microsoft. Il m'a fallu environ deux jours pour me familiariser avec la syntaxe des schémas de la bibliothèque de recherche. Même si le volet Office Research Library est similaire à un navigateur intégré, il n'en possède pas la flexibilité. Vous ne pouvez pas définir la couleur d'arrière-plan, vous avez un contrôle limité sur la disposition du texte et des images et il n'existe aucun script côté client. Cependant, une fois que vous avez bien assimilé la syntaxe, vous serez surpris de la quantité de tâches qu'elle vous permet d'effectuer.

Un autre point intéressant : puisque vous devez apprendre à gérer une propriété à écran limité, votre zone de travail est large de 100 à 200 pixels en général. Par conséquent, vous devez apprendre à économiser votre manière de présenter les informations. D'une certaine façon, vous pouvez comparer cet exercice au formatage d'informations pour un assistant numérique personnel, étant donné qu'il s'agit d'un facteur de forme similaire.

L'un des avantages de .NET Framework pour les services Web XML est son impressionnante technologie de mise en cache intégrée. En ajoutant l'attribut suivant à la méthode Web Response(), nous obtenons la mise en cache de la réponse d'inscription, qui ne change pas très souvent :

[WebMethod(CacheDuration=86400)] //Cache this for a full day, this rarely 
changes (86400 seconds = 24 Hours)
public string Registration(string registrationxml)

J'ai également appliqué cela à la méthode Query() et défini le temps de mise en mémoire cache sur 1 heure, comme illustré dans le code ci-dessous :

[WebMethod(CacheDuration=3600)] //Cache for 1 hour
public string Query(string queryXml)

Comment déboguer une bibliothèque de recherche ? Encore une fois, il est recommandé de comparer cette opération à celle du débogage de l'application d'un navigateur HTML. Toutefois, dans ce cas, le client Office est le navigateur. Définissez vos points d'arrêt dans les méthodes Web que vous souhaitez déboguer, puis exécutez le projet en activant le débogage. Visual Studio .NET lancera une instance d'Internet Explorer et placera le code en mode débogage. Laissez la fenêtre Internet Explorer ouverte et passez à l'application Office que vous êtes en train de tester. Lorsque vous commencez à exécuter la requête de recherche via la bibliothèque de recherche, Visual Studio .NET s'interrompra au niveau des points d'arrêt.

Et pour finir, voici quelques remarques générales :

  • La bibliothèque de recherche prend en charge la collecte d'un ensemble d'informations plus important via une syntaxe de forme.
  • Connexions sécurisées grâce à la prise en charge de https://.
  • La bibliothèque de recherche prend en charge l'authentification Windows.
  • Prise en charge des cookies :
    • Possibilité d'écrire des cookies reconnus par le navigateur.
    • Partage de cookies persistants avec Internet Explorer.

Chris Kunicki travaille avec des clients, des architectes et des ingénieurs pour concevoir des applications bureau, Web et d'entreprise conviviales sur OfficeZealot.com. Chris est depuis longtemps féru de développement Office et assure la promotion d'Office en tant que plate-forme importante pour créer des solutions en écrivant et en dialoguant avec des utilisateurs et des développeurs. Vous pouvez le contacter en écrivant à chris@officezealot.com. Pour connaître son point de vue, connectez-vous à http://www.officezealot.com.

Dernière mise à jour le mardi 6 mai 2003

Pour en savoir plus