Cómo: Llamar a un servicio Web de forma asincrónica (Visual Basic)
En este ejemplo se adjunta un controlador a un evento de controlador asincrónico de servicios web para poder recuperar el resultado de una llamada de método asincrónico. En este ejemplo se ha usado el servicio web DemoTemperatureService de http://www.xmethods.net
.
Cuando se hace referencia a un servicio web en el proyecto en el entorno de desarrollo integrado (IDE) de Visual Studio, dicho servicio se agrega al objeto My.WebServices
y el IDE genera una clase de proxy de cliente para obtener acceso al servicio web especificado.
La clase de proxy permite llamar sincrónicamente a los métodos de servicio web, mientras la aplicación espera a que la función finalice. El proxy crea además otros miembros para ayudar a llamar al método asincrónicamente. Por cada función de servicio web, NombreDeFunciónDeServicioWeb, el proxy crea una subrutina NombreDeFunciónDeServicioWebAsync
, un evento NombreDeFunciónDeServicioWebCompleted
y una clase NombreDeFunciónDeServicioWebCompletedEventArgs
. En este ejemplo se muestra cómo usar los miembros asincrónicos para acceder a la función getTemp
del servicio web DemoTemperatureService.
Nota
Este código no funciona en aplicaciones web, ya que ASP.NET no admite el objeto My.WebServices
.
Llamada a un servicio web de forma asincrónica
Haga referencia al servicio web DemoTemperatureService de
http://www.xmethods.net
. La dirección eshttp://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
Agregue un controlador de eventos para el evento
getTempCompleted
:Private Sub getTempCompletedHandler(ByVal sender As Object, ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
Nota
La instrucción
Handles
no se puede usar para asociar un controlador de eventos con los eventos del objetoMy.WebServices
.Agregue un campo para saber si el controlador de eventos se ha agregado al evento
getTempCompleted
:Private handlerAttached As Boolean = False
Agregue un método para agregar el controlador de eventos al evento
getTempCompleted
(en caso necesario) y para llamar al 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
Llame al método
getTemp
para llamar al método webCallGetTempAsync
asincrónicamente. Cuando el método web finalice, su valor devuelto se pasa al controlador de eventosgetTempCompletedHandler
.