Как создать веб-службы, анализирующие содержимое страницы

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

Веб-службы, созданные с помощью ASP.NET, предоставляют решение по выполнению анализа HTML, позволяющее разработчикам анализировать содержимое удаленной HTML-страницы и программно представлять получаемые данные. Подробности см. в разделе Анализ HTML XML-веб-службами, созданными с помощью ASP.NET.

Задание операции и входных параметров

  1. Создайте документ на языке WSDL, который обычно сохраняется с расширением имени файла wsdl. Содержимое документа должно состоять из допустимых данных XML, соответствующих схеме WSDL. Для прототипа можно использовать WSDL-документ, динамически создаваемый для веб-службы, работающей в ASP.NET. Создайте запрос, добавив к URL-адресу веб-службы аргумент ?wsdl.

  2. Задайте элементы, определяющие операцию каждого метода веб-службы, который анализирует текст HTML. Для выполнения этого и следующего действий требуется знание формата WSDL.

  3. Если в методе анализа используются входные параметры, задайте элементы, представляющие эти параметры, и свяжите их с операцией.

Задание данных, возвращаемых с анализируемой HTML-страницы

  1. Добавьте XML-элемент <text> в пределах элемента <output>, который выводится посредством XPath /definitions/binding/operation/output, и укажите пространство имен. Элемент <operation> представляет метод веб-службы, который получает HTML-код после синтаксического анализа.
xxb0bsdh.note(ru-ru,VS.100).gifПримечание
Имя операции внутри привязки должно быть глобально уникальным, или программа Wsdl.exe может быть выполнена с пространством имен, заданным для предотвращения конфликтов именования, вызванных другими файлами WSDL, импортированными в том же приложении.

  1. Добавьте XML-элементы <match> в описании службы в пределах XML-элемента <text> для каждого блока данных, который требуется вернуть с анализируемой HTML-страницы.

  2. Примените атрибуты к элементу <match>. Допустимые атрибуты представлены в таблице в разделе «Анализ HTML с помощью XML-веб-служб ASP.NET».

Создание кода клиентского прокси-класса для веб-службы

  1. Запустите программу Wsdl.exe, входящую в пакет средств разработки Windows® SDK. Передайте WSDL-файл, созданный в качестве входного файла.

Пример

Следующий пример кода — это простой образец страницы с тегами <TITLE> и <H1>.

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

Следующий пример кода представляет собой описание службы, которая анализирует содержимое HTML-страницы, извлекая содержимое текста внутри тегов <TITLE> и <H1>. В этом примере кода метод TestHeaders определяется для привязки GetTitleHttpGet. Метод TestHeaders определяет два блока данных, которые могут быть возвращены с анализируемой HTML-страницы в XML-элементах <match> Title и H1, анализирующих содержимое тегов <TITLE> и <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>

Следующий пример кода представляет собой часть прокси-класса, созданного программой Wsdl.exe для приведенного выше описания службы.

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

См. также

Справочник

Инструмент языка описания веб-служб (Wsdl.exe)
MatchAttribute

Основные понятия

Анализ HTML XML-веб-службами, созданными с помощью ASP.NET

Другие ресурсы

.NET Framework Regular Expressions
XML-веб-службы с использованием ASP.NET