Como chamar um serviço Web de forma assíncrona (Visual Basic)

Este exemplo anexa um manipulador ao evento de manipulador assíncrono de um serviço Web, para que ele possa recuperar o resultado de uma chamada de método assíncrono. Este exemplo usou o serviço Web DemoTemperatureService em http://www.xmethods.net.

Quando você faz referência a um serviço Web em seu projeto no Visual Studio Integrated Development Environment (IDE), ele é adicionado ao My.WebServices objeto e o IDE gera uma classe de proxy de cliente para acessar um serviço Web especificado

A classe proxy permite que você chame os métodos de serviço Web de forma síncrona, onde seu aplicativo aguarda a conclusão da função. Além disso, o proxy cria membros adicionais para ajudar a chamar o método de forma assíncrona. Para cada função de serviço Web, NameOfWebServiceFunction, o proxy cria uma sub-rotina NameOfWebServiceFunctionAsync , um evento NameOfWebServiceFunctionCompleted e uma classe NameOfWebServiceFunctionCompletedEventArgs . Este exemplo demonstra como usar os membros assíncronos para acessar a getTemp função do serviço Web DemoTemperatureService.

Observação

Esse código não funciona em aplicativos Web, porque ASP.NET não suporta o My.WebServices objeto.

Chamar um serviço Web de forma assíncrona

  1. Consulte o serviço Web DemoTemperatureService em http://www.xmethods.net. O endereço é

    http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
    
  2. Adicione um manipulador de eventos para o getTempCompleted evento:

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

    Observação

    Não é possível usar a Handles instrução para associar um manipulador de eventos aos My.WebServices eventos do objeto.

  3. Adicione um campo para controlar se o manipulador de eventos foi adicionado ao getTempCompleted evento:

    Private handlerAttached As Boolean = False
    
  4. Adicione um método para adicionar o manipulador de eventos ao getTempCompleted evento, se necessário, e para chamar o getTempAsync método:

    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
    

    Para chamar o getTemp método Web de forma assíncrona, chame o CallGetTempAsync método. Quando o método Web termina, seu valor de retorno é passado para o manipulador de getTempCompletedHandler eventos.

Ver também