Comment : créer des services Web qui analysent le contenu d'une page Web

Cette rubrique est spécifique à une technologie existante. Les services Web XML et les clients du service Web XML doivent à présent être créés à l'aide de Windows Communication Foundation.

Les services Web créés à l'aide d'ASP.NET offrent une solution d'analyse HTML qui permet aux développeurs d'analyser le contenu d'une page HTML distante et d'exposer les données résultantes par programmation. Pour une explication complète, consultez Analyse HTML par les services Web XML ASP.NET.

Pour spécifier une opération et des paramètres d'entrée

  1. Créez un document du WSDL (Web Services Description Language), généralement enregistré avec l'extension de nom de fichier .wsdl. Le contenu du document doit se composer de XML valide d'après le schéma WSDL. Pour un prototype, vous pouvez utiliser un document WSDL généré dynamiquement pour un service Web s'exécutant sur ASP.NET. Faites une demande avec un argument ?wsdl ajouté à l'URL du service Web.

  2. Spécifiez les éléments qui définissent l'opération de chaque méthode Web Service qui analyse le texte HTML. Cette étape et la prochaine requièrent une connaissance du format WSDL.

  3. Si la méthode d'analyse nécessite des paramètres d'entrée, spécifiez les éléments qui représentent ces paramètres et associez-les à l'opération.

Pour spécifier les données retournées par une page HTML analysée

  1. Ajoutez un élément XML <text> qualifié par espace de noms dans l'élément <output> qui apparaît via le XPath /definitions/binding/operation/output. L'élément <operation> représente la méthode de service Web qui récupère le HTML analysé.
xxb0bsdh.note(fr-fr,VS.100).gifRemarque :
Le nom d'opération à l'intérieur d'une liaison doit être globalement unique ou Wsdl.exe peut être exécuté avec l'espace de noms spécifié pour empêcher des conflits d'attribution de nom provoqués par d'autres fichiers WSDL importés dans la même application.

  1. Ajoutez des éléments XML <match> dans la description de service de l'élément XML <text> pour chaque donnée que vous souhaitez renvoyer de la page HTML analysée.

  2. Appliquez des attributs à l'élément <match>. Les attributs valides sont présentés dans un tableau dans la rubrique Analyse HTML par les services Web XML ASP.NET.

Pour générer du code de proxy client pour le service Web

  1. Exécutez l'outil Wsdl.exe à partir du Kit de développement logiciel (SDK) Windows®. Passez comme entrée le fichier WSDL que vous avez créé.

Exemple

L'exemple de code suivant est un exemple de page Web simple contenant des balises <TITLE> et <H1>.

<HTML>
 <HEAD>
  <TITLE>Sample Title</TITLE>
 </HEAD>
 <BODY>
    <H1>Some Heading Text</H1>
 </BODY>
</HTML>

L'exemple de code suivant est une description de service qui analyse le contenu de la page HTML en extrayant le contenu du texte des balises <TITLE> et <H1>. Dans l'exemple de code, une méthode TestHeaders est définie pour la liaison GetTitleHttpGet. La méthode TestHeaders définit deux données qui peuvent être retournées de la page HTML analysée dans les éléments XML <match> : Titleet H1``<TITLE>, qui analysent respectivement le contenu des balises et <H1>.

<?xml version="1.0"?>
<definitions xmlns:s="http://www.w3.org/2001/XMLSchema"
             xmlns:http="https://schemas.xmlsoap.org/wsdl/http/"
             xmlns:mime="https://schemas.xmlsoap.org/wsdl/mime/"
             xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/"
             xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:s0="http://tempuri.org/"
             targetNamespace="http://tempuri.org/"
             xmlns="https://schemas.xmlsoap.org/wsdl/">
  <types>
    <s:schema targetNamespace="http://tempuri.org/"
              attributeFormDefault="qualified"
              elementFormDefault="qualified">
      <s:element name="TestHeaders">
        <s:complexType derivedBy="restriction"/>
      </s:element>
      <s:element name="TestHeadersResult">
        <s:complexType derivedBy="restriction">
          <s:all>
            <s:element name="result" type="s:string" nullable="true"/>
          </s:all>
        </s:complexType>
      </s:element>
      <s:element name="string" type="s:string" nullable="true"/>
    </s:schema>
  </types>
  <message name="TestHeadersHttpGetIn"/>
  <message name="TestHeadersHttpGetOut">
    <part name="Body" element="s0:string"/>
  </message>
  <portType name="GetTitleHttpGet">
    <operation name="TestHeaders">
      <input message="s0:TestHeadersHttpGetIn"/>
      <output message="s0:TestHeadersHttpGetOut"/>
    </operation>
  </portType>
  <binding name="GetTitleHttpGet" type="s0:GetTitleHttpGet">
    <http:binding verb="GET"/>
    <operation name="TestHeaders">
      <http:operation location="MatchServer.html"/>
      <input>
        <http:urlEncoded/>
      </input>
      <output>
         <text xmlns="https://microsoft.com/wsdl/mime/textMatching/">
          <match name='Title' pattern='TITLE&gt;(.*?)&lt;'/>
          <match name='H1' pattern='H1&gt;(.*?)&lt;'/>
         </text>
      </output>
    </operation>
  </binding>
  <service name="GetTitle">
    <port name="GetTitleHttpGet" binding="s0:GetTitleHttpGet">
      <http:address location="https://localhost" />
    </port>
  </service>
</definitions>

L'exemple de code suivant est une partie de la classe proxy générée par Wsdl.exe pour la description de service précédente.

' GetTitle is the name of the proxy class.
Public Class GetTitle
  Inherits HttpGetClientProtocol
  Public Function TestHeaders() As TestHeadersMatches
     Return CType(Me.Invoke("TestHeaders", (Me.Url + _
          "/MatchServer.html"), New Object(-1) {}),TestHeadersMatches)
  End Function
End Class
Public Class TestHeadersMatches    Public Title As String    Public H1 As String
End Class
' GetTitle is the name of the proxy class.
public class GetTitle : HttpGetClientProtocol
{
  public TestHeadersMatches TestHeaders() 
  {
        return ((TestHeadersMatches)(this.Invoke("TestHeaders", 
                 (this.Url + "/MatchServer.html"), new object[0])));
  }
}    
public class TestHeadersMatches 
{
    public string Title;    public string H1;
}

Voir aussi

Référence

Outil Web Services Description Language Tool (Wsdl.exe)
MatchAttribute

Concepts

Analyse HTML par les services Web XML ASP.NET

Autres ressources

.NET Framework Regular Expressions
Services Web XML utilisant ASP.NET