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


Практическое руководство. Асинхронный вызов веб-сервиса

Обновлен: Ноябрь 2007

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

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

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

ms233842.alert_note(ru-ru,VS.90).gifПримечание.

Этот код не работает в веб-приложениях, поскольку 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
    
    ms233842.alert_note(ru-ru,VS.90).gifПримечание.

    Выражение 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