Procedura: chiamare un servizio Web in modo asincrono (Visual Basic)
Nell'esempio riportato di seguito viene associato un gestore a un evento gestore asincrono di un servizio Web in modo che esso possa recuperare il risultato di una chiamata asincrona.Nell'esempio è stato utilizzato il servizio Web DemoTemperatureService disponibile all'indirizzo http://www.xmethods.net.
Quando in un progetto si fa riferimento a un servizio Web nell'ambiente di sviluppo integrato (IDE, Integrated Development Environment) di Visual Studio, questo viene aggiunto all'oggetto My.WebServices e l'IDE genera una classe proxy del client per accedere a un servizio Web specifico.
La classe proxy consente di chiamare i metodi del servizio Web in modo sincrono, in altre parole l'applicazione aspetta che la funzione sia terminata.Inoltre, il proxy crea membri aggiuntivi che contribuiscono a chiamare il metodo in modo asincrono.Per ogni funzione di servizio Web, NameOfWebServiceFunction, il proxy crea una subroutine NameOfWebServiceFunctionAsync, un evento NameOfWebServiceFunctionCompleted e una classe NameOfWebServiceFunctionCompletedEventArgs.Nell'esempio viene mostrato come utilizzare i membri asincroni per accedere alla funzione getTemp del servizio Web DemoTemperatureService.
[!NOTA]
Poiché ASP.NET non supporta l'oggetto My.WebServices, tale codice non funziona nelle applicazioni Web.
Per chiamare un servizio Web in modo asincrono
Fare riferimento al servizio Web DemoTemperatureService, disponibile nel sito Web http://www.xmethods.net.L'indirizzo è:
http://www.xmethods.net/sd/2001/DemoTemperatureService.wsdl
Aggiungere un gestore eventi per l'evento getTempCompleted:
Private Sub getTempCompletedHandler(ByVal sender As Object, ByVal e As net.xmethods.www.getTempCompletedEventArgs) MsgBox("Temperature: " & e.Result) End Sub
[!NOTA]
Non è possibile utilizzare l'istruzione Handles per associare un gestore eventi agli eventi dell'oggetto My.WebServices.
Aggiungere un campo di cui tenere traccia se il gestore eventi è stato aggiunto all'evento getTempCompleted.
Private handlerAttached As Boolean = False
Aggiungere un metodo che consenta di aggiungere, se necessario, il gestore eventi all'evento getTempCompleted e chiamare il metodo 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
Per chiamare il metodo Web getTemp in modo asincrono, chiamare il metodo CallGetTempAsync.Una volta che il metodo Web ha terminato, esso restituisce il valore che è stato passato al gestore eventi getTempCompletedHandler.