Как создать веб-службы, анализирующие содержимое страницы
Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.
Веб-службы, созданные с помощью ASP.NET, предоставляют решение по выполнению анализа HTML, позволяющее разработчикам анализировать содержимое удаленной HTML-страницы и программно представлять получаемые данные. Подробности см. в разделе Анализ HTML XML-веб-службами, созданными с помощью ASP.NET.
Задание операции и входных параметров
Создайте документ на языке WSDL, который обычно сохраняется с расширением имени файла wsdl. Содержимое документа должно состоять из допустимых данных XML, соответствующих схеме WSDL. Для прототипа можно использовать WSDL-документ, динамически создаваемый для веб-службы, работающей в ASP.NET. Создайте запрос, добавив к URL-адресу веб-службы аргумент ?wsdl.
Задайте элементы, определяющие операцию каждого метода веб-службы, который анализирует текст HTML. Для выполнения этого и следующего действий требуется знание формата WSDL.
Если в методе анализа используются входные параметры, задайте элементы, представляющие эти параметры, и свяжите их с операцией.
Задание данных, возвращаемых с анализируемой HTML-страницы
- Добавьте XML-элемент <text> в пределах элемента <output>, который выводится посредством XPath /definitions/binding/operation/output, и укажите пространство имен. Элемент <operation> представляет метод веб-службы, который получает HTML-код после синтаксического анализа.
Примечание |
---|
Имя операции внутри привязки должно быть глобально уникальным, или программа Wsdl.exe может быть выполнена с пространством имен, заданным для предотвращения конфликтов именования, вызванных другими файлами WSDL, импортированными в том же приложении. |
Добавьте XML-элементы <match> в описании службы в пределах XML-элемента <text> для каждого блока данных, который требуется вернуть с анализируемой HTML-страницы.
Примените атрибуты к элементу <match>. Допустимые атрибуты представлены в таблице в разделе «Анализ HTML с помощью XML-веб-служб ASP.NET».
Создание кода клиентского прокси-класса для веб-службы
- Запустите программу 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>(.*?)<'/>
<match name='H1' pattern='H1>(.*?)<'/>
</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