Cамоучитель по VB.NET

Результат обращения к web-службе с использованием запроса GET




С запросами SOAP дело обстоит несколько сложнее. Вряд ли кому-нибудь захочется генерировать их вручную. Вместо этого можно воспользоваться командой Project > Add Web Reference или утилитой командной строки wsdl.exe, входящей в поставку .NET Framework. Оба варианта приводят к одному результату — генерируется вспомогательный класс-посредник, который используется в программе.

Пожалуй, решение с утилитой командной строки отличается большей гибкостью. Ниже показано, как выглядела командная строка в нашем случае. Хотя приведенный пример разбит на две строки, его следует ввести в одной строке:

"С:\Program Fi1es\Microsoft.NET\FrameworkSDK\Bin\wsdl"/language:VB"

http://localhost/WebServicel/Servicel.asmx?wsdl

При запуске с ключом /language: VB утилита создает файл с кодом вспомогательного класса Servicel.vb, по умолчанию находящийся в одном каталоге с wsdl.exe (выходной каталог задается ключом out). Основной код сгенерированного класса выглядит так (ключевые строки выделены жирным шрифтом):

Option Strict Off

Option Explicit On

Imports System

Imports System.Diagnostics

Imports System.Web.Services

Imports System.Web.Servi ces.Protocols

Imports System.Xml.Serialization

'This source code was auto-generated by wsdl,Version=l.0.2914.16.



<System.Web.Servi ces.WebServi ceBi ndi ngAttri bute(Name:="ServicelSoap". [Namespace ]:="http://tempuri,org/")> _

Public Class Servicel

Inherits System.Web.Services.Protocols.SoapHttpClientProtocol

<System.Diagnostics.DebuggerStepThroughAttri bute()> _

Public Sub New() MyBase.New Me.Url ="http://localhost/WebServicel/Servicel.asmx"

End Sub

<System.Diagnostics.DebuggerStepThroughAttri bute().

System.Web.Services.Protocols.

SoapDocumentMethodAttri bute _

("http://tempuri.org/GetWeather".

Use:=System.Web.Services.Description.

SoapBindingUse.Literal.

ParameterStyle:=System.Web.Services.

Protocols.SoapParameterStyle.Wrapped)> _

Public Function GetWeather(ByVal city

As String)As String

Dimresults() As Object=Me.Invoke

("GetWeather". New Object 0 {city})

Return CType(results(0). String)

End Function

<System.Diagnostics.

DebuggerStepThroughAttribute()> _

Public Function BeginGetWeather(ByVal city As String._

ByVal callback As System.AsyncCallback.

ByVal asyncState As Object) As System.IAsyncResult

Return

Me.Beginlnvoke("GetWeather", New Object()

{city}.call back.asyncState)

End Function

<System.Diagnostics.DebuggerStepThroughAttributet)> _

Public Function EndGetWeather(ByVal asyncResult

As System.IAsyncResult) As String

Dim results()As Object = Me.EndInvoke(asyncResult)

Return

CType(results(0), String)

End Function

End Class

Затем в проект включается код класса (или ссылка на него) и ссылки на сборки System. Web, System. XML и System. Web.Services. Остается лишь создать экземпляр вспомогательного класса и вызвать функцию GetWeather!

Теперь, когда вы знаете, как получить результаты обращения к web-службе, нетрудно представить себе следующие возможные шаги:

  • объединение результатов нескольких обращений к web-службам в одном файле;
  • применение к результату запроса преобразований XSL и построение новых страниц с HTML-кодом при помощи web-служб, работающих на разных сайтах.

Перед нами одно из проявлений той концепции, которую сейчас активно внедряет Microsoft, — Web как глобальная сеть, через которую пользователь легко получает доступ к любым необходимым данным.





Содержание раздела