Procedura: creare servizi Web che analizzano il contenuto di una pagina Web

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

I servizi Web creati utilizzando ASP.NET forniscono una soluzione di analisi HTML che consente agli sviluppatori di analizzare il contenuto di una pagina HTML remota e di esporre i dati risultanti a livello di codice. Per ulteriori informazioni, vedere Analisi HTML con i servizi Web XML di ASP.NET.

Per specificare un'operazione e i parametri di input

  1. Creare un documento in WSDL (Web Services Description Language), che in genere viene salvato con estensione wsdl. Il contenuto del documento deve essere costituito da XML valido secondo lo schema WSDL. Come prototipo, è possibile utilizzare un documento WSDL generato dinamicamente per un servizio Web in esecuzione su ASP.NET. Effettuare una richiesta aggiungendo un argomento ?wsdl all'URL del servizio Web.

  2. Specificare gli elementi che definiscono l'operazione per ogni metodo del servizio Web che analizza il testo HTML. Questo passaggio e il prossimo richiedono una conoscenza del formato WSDL.

  3. Se il metodo di analisi richiede parametri di input, specificare gli elementi che rappresentano tali parametri e associarli all'operazione.

Per specificare i dati restituiti da una pagina HTML analizzata

  1. Aggiungere un elemento XML <text> qualificato con lo spazio dei nomi all'interno dell'elemento <output> che appare tramite XPath /definitions/binding/operation/output. L'elemento <operation> rappresenta il metodo del servizio Web che recupera l'HTML analizzato.
xxb0bsdh.note(it-it,VS.100).gifNota:
In un'associazione il nome dell'operazione deve essere unico oppure lo strumento Wsdl.exe può essere eseguito con uno spazio dei nomi specifico per impedire conflitti di denominazione causati dagli altri file WSDL importati nella stessa applicazione.

  1. Aggiungere gli elementi XML <match> nella descrizione del servizio all'interno dell'elemento XML <text> per ogni dato che si desidera venga restituito dalla pagina HTML analizzata.

  2. Applicare attributi all'elemento <match>. Gli attributi validi vengono presentati in una tabella sotto l'argomento Analisi HTML con i servizi Web XML di ASP.NET.

Per generare codice proxy client per il servizio Web

  1. Eseguire lo strumento Wsdl.exe da Windows® Software Development Kit (SDK). Passare il file WSDL che si è creato come input.

Esempio

L'esempio di codice seguente è un semplice esempio della pagina Web che contiene tag <TITLE> e <H1>.

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

L'esempio di codice seguente è una descrizione del servizio che analizza il contenuto della pagina HTML, estraendo il contenuto del testo all'interno di tag <TITLE> e <H1>. Nell'esempio di codice riportato di seguito, viene definito il metodo TestHeaders per un'associazione GetTitleHttpGet. Il metodo TestHeaders definisce due porzioni di dati che possono essere restituite dalla pagina HTML analizzata in elementi XML <match>: Title e H1 che analizzano il contenuto dei tag <TITLE> e <H1> rispettivamente.

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

Nell'esempio di codice riportato di seguito viene illustrata una porzione della classe proxy generata da Wsdl.exe per il servizio descritto precedentemente.

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

Vedere anche

Riferimento

Strumento del linguaggio di descrizione dei servizi Web (Wsdl.exe)
MatchAttribute

Concetti

Analisi HTML con i servizi Web XML di ASP.NET

Altre risorse

.NET Framework Regular Expressions
Creare servizi Web XML mediante ASP.NET