Практическое руководство. Асинхронный вызов веб-сервиса
Обновлен: Ноябрь 2007
В этом примере к асинхронному обработчику события веб-службы присоединяется обработчик, после чего он может извлекать результат асинхронного вызова метода. В этом примере используется веб-служба DemoTemperatureService, расположенная на веб-узле http://www.xmethods.net.
При ссылке на веб-службу в проекте в интегрированной среде разработки Visual Studio она добавляется в объект My.WebServices, и среда разработки создает клиентский прокси-класс для доступа к указанной веб-службе
Прокси-класс позволяет вызывать методы веб-служб синхронно, пока приложение ожидает окончания выполнения функции. Кроме того, прокси создает дополнительные члены, позволяющие вызывать метод асинхронно. Для каждой функции веб-службы 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, если это необходимо, и вызывающий метод getTempAsynch:
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.
См. также
Задачи
Практическое руководство. Получение доступа к веб-службам в управляемом коде
Основные понятия
Доступ к веб-службам приложения