Como chamar um serviço Web de forma assíncrona (Visual Basic)
Este exemplo conecta um manipulador a um evento de manipulador assíncrono do 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 IDE (Ambiente de Desenvolvimento Integrado) do Visual Studio, ele é adicionado ao objeto My.WebServices
, e o IDE gera uma classe proxy do cliente para acesso a um serviço Web especificado
A classe proxy permite chamar os métodos de serviço Web de forma síncrona, em que seu aplicativo aguarda até que a função seja concluída. 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 função getTemp
do serviço Web DemoTemperatureService.
Observação
Esse código não funciona em aplicativos Web, pois o ASP.NET não oferece suporte ao objeto My.WebServices
.
Chamar um serviço Web de forma assíncrona
Consulte o serviço Web DemoTemperatureService em
http://www.xmethods.net
. O endereço éhttp://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
Adicione um manipulador de eventos ao evento
getTempCompleted
:Private Sub getTempCompletedHandler(ByVal sender As Object, ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
Observação
Você não pode usar a instrução
Handles
para associar um manipulador de eventos aos eventos do objetoMy.WebServices
.Adicione um campo para acompanhar se o manipulador de eventos tiver sido adicionado ao evento
getTempCompleted
:Private handlerAttached As Boolean = False
Adicione um método para adicionar ao manipulador de eventos ao evento
getTempCompleted
, se necessário, e para chamar o métodogetTempAsync
: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 método Web
getTemp
de forma assíncrona, chame o métodoCallGetTempAsync
. Quando o método Web for concluído, seu valor retornado será transmitido ao manipulador de eventosgetTempCompletedHandler
.