Использование web-службы на стороне клиента
Результат представлен в формате XML, что позволяет легко проанализировать данные в программе. Также обратите внимание на то, что в автоматически сгенерированном коде показано, как обращаться к web-службе за пределами IDE. Для этого необходимо лишь сгенерировать правильный запрос HTTP GET или SOAP. Ниже приведен пример построения запроса GET в консольном приложении, использующем для отправки запроса GET классы WebRequest и WebResponse пространства имен System.Net:
1 Imports System.Net
2 Imports System.IO
3 Module Module1
4 Sub Main()
5 Dim myResponse As WebResponse
6 Try
7 Dim myWebServiceRequest As WebRequest
8 myWebServiceRequest – WebRequest.Create _
9 ("http://localhost/WebServicel/Servicel.asmx/GetWeather?dty=SeattIe")
10 myResponse = _
11 myWebServiceRequest.GetResponse()
12 Dim theAnswer As String
13 Dim aStream As New StreamReader
(myResponse.GetResponseStream)
14 theAnswer = aStream.ReadToEnd
15 MsgBox(theAnswer)
16 Catch e As Exception
17 Console.WriteLine(e.Message)
18 Finally
19 myResponse. Close()
20 End Try
21 End Sub
22 End Module
Ключевая роль в этом листинге принадлежит строке 8 (продолжающейся в строке 9), в которой серверу передается запрос GET. Как было показано в главе 9, результат представляет собой поток данных, используемый для построения StreamReader (строка 13). Строка 14 читает в строковую переменную весь текст потока. Строка 19 закрывает объект запроса HTTP и освобождает все связанные с ним ресурсы. Кстати, переменная myResponse была объявлена в строке 5 именно потому, что при объявлении ее в блоке Try (строки 6-15) переменная оказалась бы недоступной для секции Finally. Результат выполнения программы показан на рис. 12.7.

Рис. 12.7. Результат обращения к 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
