Практическое руководство. Асинхронный вызов веб-службы (Visual Basic)
В этом примере обработчик присоединяется к асинхронному обработчику событий веб-службы таким образом, чтобы получать результаты вызова асинхронного метода. В этом примере используется веб-служба DemoTemperatureService, которая находится на веб-сайте http://www.xmethods.net
.
При ссылке на веб-службу в проекте в интегрированной среде разработки Visual Studio (IDE) она добавляется к объекту My.WebServices
, а среда IDE создает класс прокси клиента, чтобы получить доступ к указанной веб-службе.
Класс прокси позволяет синхронно вызывать методы веб-службы в те моменты, когда приложение ожидает завершения выполнения функции. Кроме того, прокси-сервер создает дополнительные элементы для обеспечения асинхронного вызова метода. Для каждой функции веб-службы NameOfWebServiceFunction прокси-сервер создает подпрограмму NameOfWebServiceFunctionAsync
, событие NameOfWebServiceFunctionCompleted
и класс NameOfWebServiceFunctionCompletedEventArgs
. В этом примере демонстрируется использование асинхронных элементов для получения доступа к функции getTemp
веб-службы DemoTemperatureService.
Примечание.
Этот код не работает в веб-приложениях, так как ASP.NET не поддерживает объект My.WebServices
.
Асинхронный вызов веб-службы
Справочные материалы по веб-службе DemoTemperatureService находятся на веб-сайте
http://www.xmethods.net
. Адрес:http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
Добавьте обработчик событий для события
getTempCompleted
.Private Sub getTempCompletedHandler(ByVal sender As Object, ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
Примечание.
Оператор
Handles
нельзя использовать для сопоставления обработчика событий с событиями объектаMy.WebServices
.Добавьте поле, которое будет отслеживать добавление к событию
getTempCompleted
обработчика событий.Private handlerAttached As Boolean = False
При необходимости добавьте метод, который будет добавлять обработчик для события
getTempCompleted
и вызывать методgetTempAsync
.Sub CallGetTempAsync(ByVal zipCode As Integer) If Not handlerAttached Then AddHandler My.WebServices. TemperatureService.getTempCompleted, AddressOf Me.TS_getTempCompleted handlerAttached = True End If My.WebServices.TemperatureService.getTempAsync(zipCode) End Sub
Чтобы асинхронно вызвать веб-метод
getTemp
, вызовите методCallGetTempAsync
. После своего завершения веб-метод вернет значение, переданное обработчику событийgetTempCompletedHandler
.