Поделиться через


Практическое руководство. Асинхронный вызов веб-службы (Visual Basic)

В этом примере к асинхронному обработчику события веб-службы присоединяется обработчик, после чего он может извлекать результат асинхронного вызова метода. В этом примере используется веб-служба DemoTemperatureService, расположенная по адресу http://www.xmethods. net.

При ссылке на веб-службу в проекте в интегрированной среде разработки Visual Studio она добавляется в объект My.WebServices, и среда разработки создает клиентский прокси-класс для доступа к указанной веб-службе

Прокси-класс позволяет вызывать методы веб-служб синхронно, пока приложение ожидает окончания выполнения функции. Кроме того, прокси создает дополнительные члены, позволяющие вызывать метод асинхронно. Для каждой функции веб-службы NameOfWebServiceFunction прокси-класс создает подпрограмму NameOfWebServiceFunctionAsync, событие NameOfWebServiceFunctionCompleted и класс NameOfWebServiceFunctionCompletedEventArgs. В этом примере демонстрируется использование асинхронных членов для получения доступа к функции getTemp веб-службы DemoTemperatureService.

Примечание

Этот код не работает в веб-приложениях, поскольку ASP.NET не поддерживает объект My.WebServices.

Асинхронный вызов веб-службы

  1. Создайте ссылку на веб-службу DemoTemperatureService, находящуюся по адресу http://www.xmethods. net. Ее адрес —

    http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
    
  2. Добавьте обработчик событий getTempCompleted.

    Private Sub getTempCompletedHandler(ByVal sender As Object, 
        ByVal e As net.xmethods.www.getTempCompletedEventArgs)
    
        MsgBox("Temperature: " & e.Result)
    End Sub
    

    Примечание

    Выражение Handles не может использоваться для связывания обработчика событий с событиями объекта My.WebServices.

  3. Добавьте поле, позволяющее определить, добавлен ли обработчик к событию getTempCompleted:

    Private handlerAttached As Boolean = False
    
  4. Добавьте метод, создающий обработчик событий 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.

См. также

Ссылки

Объект My.WebServices (Visual Basic)

Основные понятия

Доступ к веб-службам приложения (Visual Basic)