I found that if a web service that is called async throws an error, the
client async callback never gets called. Is there something that I am
missing?
Server code...
<WebMethod()> Public Function DoSomeWork(ByVal Delay As Integer) As Integer
Throw New Exception("I am broken")
End Function
Client code...
Public Delegate Function myAsyncDelegate(ByVal intReturn As Integer) As
Integer
Private Sub cmdWebServAsync_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles cmdWebServAsync.Click
'Create instance of web service proxy
'Call the method "DoSomeWork" asyncronously. The first parameter
is the value
'for the actual method call parameter and the second parameter is
the address of the
'function to be called when the method completes execution.
'WebServ.BeginDoSomeWork(Int32.Parse(txtDelay.Text), New
AsyncCallback(AddressOf Me.MyCallBack), Nothing)
'Create instance of web service proxy
Dim WebServ As New localhost.Service1()
Dim AsyncCallback As New AsyncCallback(AddressOf Me.MyCallBack)
Dim AsyncDelegate As New myAsyncDelegate(AddressOf
WebServ.DoSomeWork)
Dim AsyncResult As IAsyncResult
'Call the web service asynchronously and display the results in a
message box.
AsyncResult = AsyncDelegate.BeginInvoke(Int32.Parse(txtDelay.Text),
AsyncCallback, Nothing)
MessageBox.Show("Async call started", "Asynchronous Call")
End Sub
Private Shared Sub MyCallBack(ByVal ar As System.IAsyncResult)
' I never get called when an exception is thrown on the server...
Dim AsyncDelegate As myAsyncDelegate
Dim AsyncResult As AsyncResult
Dim ReturnValue As Integer
AsyncResult = CType(ar, AsyncResult)
AsyncDelegate = AsyncResult.AsyncDelegate()
'End async call
ReturnValue = AsyncDelegate.EndInvoke(AsyncResult)
MessageBox.Show("Asynchronous response has returned with the value:
" & ReturnValue.ToString)
End Sub
You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.