Cómo: Crear servicios web que analicen el contenido de una página web

Este tema es específico de una tecnología heredada. Ahora, los servicios Web XML y los clientes de servicios Web XML deben crearse con Windows Communication Foundation.

Los servicios Web creados utilizando ASP.NET proporcionan una solución de análisis de HTML que permite los programadores analizar contenido desde una página HTML remota y exponer mediante programación los datos resultantes. Para una explicación detallada, consulte Analizar HTML con servicios web XML de ASP.NET.

Para especificar una operación y los parámetros de entrada

  1. Cree un documento de lenguaje de descripción de servicios Web (WSDL), que normalmente se guarda con la extensión de nombre de archivo .wsdl. El contenido del documento debe estar compuesto de XML válido según el esquema WSDL. Para un prototipo, puede usar un documento WSDL generado dinámicamente para un servicio Web que se ejecuta en ASP.NET. Realice una solicitud con un argumento ¿wsdl anexado a la dirección URL del servicio Web.

  2. Especifique los elementos que definen la operación de cada método de servicios Web que analiza el texto HTLM. Este paso y el próximo requieren un conocimiento del formato del WSDL.

  3. Si el método de análisis acepta parámetros de entrada, especifique los elementos que representan esos parámetros y asócielos a la operación.

Para especificar los datos devueltos desde una página HTML analizada

  1. Agregue un elemento XML <text> del espacio de nombres calificado dentro del elemento <output> que aparece a través de /definitions/binding/operation/output de Xpath. El elemento <operation> representa el método de servicios Web que recupera la página HTML analizada.
xxb0bsdh.note(es-es,VS.100).gifNota:
El nombre de la operación dentro de un enlace debe ser un identificador único global o puede ejecutarse Wsdl.exe con el espacio de nombres especificado para evitar colisiones de nombres producidas por otros archivos WSDL importados en la misma aplicación.

  1. Agregue elementos XML <match> en la descripción del servicio dentro del elemento XML <text> para cada parte de datos que desea devolver desde la página HTML analizada.

  2. Aplique los atributos al elemento <match>. Los atributos válidos se presentan en una tabla bajo el tema Analizar HTML a través de servicios Web XML de ASP.NET.

Para generar el código proxy del cliente para el servicio Web

  1. Ejecute la herramienta Wsdl.exe desde el kit de desarrollo de software de Windows® (SDK). Pase el archivo WSDL que creó como entrada.

Ejemplo

El ejemplo de código siguiente es un ejemplo de una página web simple que contiene etiquetas <TITLE> y <H1>.

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

El ejemplo de código siguiente es una descripción del servicio que analiza el contenido de la página HTML extrayendo el contenido del texto dentro de las etiquetas <TITLE> y <H1>. En el ejemplo de código, se define un método TestHeaders para el enlace GetTitleHttpGet. El método TestHeaders define dos partes de datos que se pueden devolver desde la página HTML analizada en elementos XML <match>: Title y H1, que analizan el contenido de las etiquetas <TITLE> y <H1> respectivamente.

<?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>

El siguiente ejemplo de código es una parte de la clase de proxy generada por Wsdl.exe para la descripción del servicio anterior.

' 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;
}

Vea también

Referencia

Herramienta Lenguaje de descripción de servicios web (Wsdl.exe)
MatchAttribute

Conceptos

Analizar HTML con servicios web XML de ASP.NET

Otros recursos

.NET Framework Regular Expressions
Servicios web XML con ASP.NET