Vorgehensweise: Erstellen von Webdiensten, die den Inhalt einer Webseite analysieren

Dieses Thema bezieht sich auf eine veraltete Technologie. XML-Webdienste und XML-Webdienstclients sollten nun mithilfe der folgenden Technologie erstellt werden: Windows Communication Foundation.

Mit ASP.NET erstellte Webdienste stellen eine HTML-Analyselösung bereit. Diese ermöglicht es Entwicklern, den Inhalt einer Remote-HTML-Seite zu analysieren und die resultierenden Daten programmgesteuert verfügbar zu machen. Eine ausführlichere Erklärung finden Sie unter HTML-Analyse von ASP.NET-XML-Webdiensten.

So geben Sie einen Vorgang und Eingabeparameter an

  1. Erstellen Sie ein WSDL-Dokument (Web Services Description Language), das in der Regel mit der Dateinamenerweiterung WSDL gespeichert wird. Der Inhalt des Dokuments muss aus gültigem XML-Code entsprechend dem WSDL-Schema bestehen. Als Prototyp können Sie ein WSDL-Dokument verwenden, das dynamisch für einen unter ASP.NET ausgeführten Webdienst generiert wird. Erstellen Sie eine Anforderung, in der das Argument ?wsdl an die URL des Webdiensts angefügt ist.

  2. Geben Sie die Elemente an, die die Arbeitsweise jeder Webdienstmethode definieren, die HTML-Text analysiert. Dieser und der nächste Schritt erfordern Kenntnisse des WSDL-Formats.

  3. Wenn die Analysemethode Eingabeparameter erfordert, definieren Sie Elemente, die diese Parameter darstellen, und ordnen diese Elemente dem Vorgang zu.

So geben Sie die Daten an, die für eine analysierte HTML-Seite zurückgegeben werden

  1. Fügen Sie ein namespacequalifiziertes <text>-XML-Element im <output>-Element hinzu, das über XPath /definitions/binding/operation/output. angezeigt wird. Das <operation>-Element stellt die Webdienstmethode dar, die analysierten HTML-Code abruft.
xxb0bsdh.note(de-de,VS.100).gifHinweis:
Der Vorgangsname in einer Bindung muss global eindeutig sein, da Wsdl.exe sonst nicht mit dem angegebenen Namespace ausgeführt werden kann. Damit werden Namenskonflikte mit anderen WSDL-Dateien verhindert, die in die gleiche Anwendung importiert werden.

  1. Fügen Sie für jedes Datenelement, das von der analysierten HTML-Seite zurückgegeben werden soll, in der Dienstbeschreibung <match>-XML-Elemente innerhalb des <text>-XML-Elements hinzu.

  2. Wenden Sie Attribute auf das <match>-Element an. Die gültigen Attribute finden Sie in einer Tabelle im Thema "HTML-Analyse durch ASP.NET-XML-Webdienste".

So generieren Sie Clientproxycode für den Webdienst

  1. Führen Sie das Tool Wsdl.exe aus dem Windows® Software Development Kit (SDK) aus. Übergeben Sie die WSDL-Datei, die Sie als Eingabe erstellt haben.

Beispiel

Das folgende Codebeispiel veranschaulicht eine einfache Webseite, die die Tags <TITLE> und <H1> enthält.

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

Das folgende Codebeispiel ist eine Dienstbeschreibung. Der Inhalt der HTML-Seite wird analysiert, indem der innerhalb der Tags <TITLE> und <H1> stehende Textinhalt extrahiert wird. Im Codebeispiel wird die TestHeaders-Methode für die GetTitleHttpGet-Bindung definiert. Die TestHeaders -Methode definiert zwei Datenelemente, die von der analysierten HTML-Seite in <match>-XML-Elementen zurückgegeben werden können: Title und H1 analysieren den Inhalt der Tags <TITLE> bzw. <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>

Das folgende Codebeispiel stellt einen Teil der Proxyklasse dar, die von Wsdl.exe für die oben aufgeführte Dienstbeschreibung erstellt wurde.

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

Siehe auch

Verweis

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

Konzepte

HTML-Analyse von ASP.NET-XML-Webdiensten

Weitere Ressourcen

.NET Framework Regular Expressions
XML-Webdienste, die ASP.NET verwenden