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


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

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

При ссылке на веб-службу в проекте в интегрированной среде разработки Visual Studio (IDE) он добавляется в 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 событие при необходимости и вызова 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 событий.

См. также