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


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

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

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

Класс прокси позволяет синхронно вызывать методы веб-службы в те моменты, когда приложение ожидает завершения выполнения функции. Кроме того, прокси-сервер создает дополнительные элементы для обеспечения асинхронного вызова метода. Для каждой функции веб-службы 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.

См. также