Использование 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