VB.NET
VB.NET
Asynchronous HTTP SOAP 1.2 Request and Response using POST
Demonstrates a working asynchronous SOAP 1.2 request and response using POST with a live server. You may try running this example with the URLs and data provided. See http://wsf.cdyne.com/WeatherWS/Weather.asmx?op=GetCityWeatherByZIP for details.Note: This example is correct in theory, but no longer works for live testing because the SOAP service provider (cdyne.com) has made changes or discontinued the free service.
Chilkat VB.NET Downloads
' TaskCompleted callback method.
Private Sub http_OnTaskCompleted(sender As Object, args As Chilkat.TaskCompletedEventArgs) Handles http.OnTaskCompleted
Dim completedTask As Chilkat.Task = args.Task;
' A finished task could be one that was canceled, aborted, or truly finished.
' If the task was "canceled", it was canceled prior to actually starting. This could
' happen if the task was canceled while waiting in a thread pool queue to be scheduled by Chilkat's
' background thread pool scheduler.
' If the task was "aborted", it indicates that it was canceled while running in a background thread.
' The ResultErrorText will likely indicate that the task was aborted.
' If the task "completed", then it ran to completion, but the actual success/failure of the method
' is determined by the result obtained via a GetResult* method. (A "completed" task will
' have a StatusInt equal to 7. If the task finished, but was not completed, then it must've
' been aborted or canceled:
If (completedTask.StatusInt <> 7) Then
Debug.WriteLine("Task did not complete.")
Debug.WriteLine("task status: " & completedTask.Status)
Exit Sub
End If
' The synchronous call to QuickGetObj would return an HTTP response object. To get this
' response object for the async call, we instantiate a new/empty HTTP response object,
' and then load it from the completed task.
Dim resp As New Chilkat.HttpResponse
success = resp.LoadTaskResult(completedTask)
If (success <> True) Then
Debug.WriteLine(resp.LastErrorText)
Exit Sub
End If
' Now that we have the response, we can get all of the information:
Debug.WriteLine("status code: " & resp.StatusCode)
Debug.WriteLine("response header: " & resp.Header)
Dim xmlResponse As New Chilkat.Xml
xmlResponse.LoadXml(resp.BodyStr)
Debug.WriteLine(xmlResponse.GetXml())
End Sub
private Sub ChilkatExample()
Dim success As Boolean = False
' This example assumes the Chilkat API to have been previously unlocked.
' See Global Unlock Sample for sample code.
Dim WithEvents http As New Chilkat.Http
Dim soapXml As New Chilkat.Xml
soapXml.Tag = "soap12:Envelope"
soapXml.AddAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")
soapXml.AddAttribute("xmlns:xsd","http://www.w3.org/2001/XMLSchema")
soapXml.AddAttribute("xmlns:soap12","http://www.w3.org/2003/05/soap-envelope")
soapXml.NewChild2("soap12:Body","")
soapXml.GetChild2(0)
soapXml.NewChild2("GetCityWeatherByZIP","")
soapXml.GetChild2(0)
soapXml.AddAttribute("xmlns","http://ws.cdyne.com/WeatherWS/")
soapXml.NewChild2("ZIP","60187")
soapXml.GetRoot2()
Debug.WriteLine(soapXml.GetXml())
Dim req As New Chilkat.HttpRequest
req.HttpVerb = "POST"
req.SendCharset = False
req.AddHeader("Content-Type","application/soap+xml; charset=utf-8")
req.AddHeader("SOAPAction","http://ws.cdyne.com/WeatherWS/GetCityWeatherByZIP")
req.Path = "/WeatherWS/Weather.asmx"
req.LoadBodyFromString(soapXml.GetXml(),"utf-8")
http.FollowRedirects = True
Dim task As Chilkat.Task = http.SynchronousRequestAsync("wsf.cdyne.com",80,False,req)
If (http.LastMethodSuccess <> True) Then
Debug.WriteLine(http.LastErrorText)
Exit Sub
End If
' Schedule the task for running on the thread pool. This changes the task's state
' from Inert to Live.
success = task.Run()
If (success <> True) Then
Debug.WriteLine(task.LastErrorText)
Exit Sub
End If
' The application is now free to do anything else
' while the HTTP request is in progress. When the task
' is completed, the TaskCompleted method is called.
' -------------------------------------------------------------------------------
' The following is a general note that applies to all programming languages:
' -------------------------------------------------------------------------------
' NOTE: This is very important: The TaskCompleted callback runs in the background thread.
' (All callbacks from an async task, such as AbortCheck, PercentDone, ProgressInfo, etc. are in the background thread.)
' An application that uses TaskCompleted must be very careful.
' For example, user interface elements (such as labels, text boxes, etc.) may not be directly
' accessible from a background thread, and could crash the application if directly accessed. Also, attempting to debug
' code running in a background thread from an IDE, especially an older IDE (such as VB6) is likely to crash the IDE.
End Sub