protected IAsyncResult BeginInvoke (string methodName, object[] parameters, AsyncCallback callback, object asyncState) { SoapMethodStubInfo msi = (SoapMethodStubInfo) type_info.GetMethod (methodName); SoapWebClientAsyncResult ainfo = null; try { SoapClientMessage message = new SoapClientMessage (this, msi, Url, parameters); message.CollectHeaders (this, message.MethodStubInfo.Headers, SoapHeaderDirection.In); WebRequest request = GetRequestForMessage (uri, message); ainfo = new SoapWebClientAsyncResult (request, callback, asyncState); ainfo.Message = message; ainfo.Extensions = SoapExtension.CreateExtensionChain (type_info.SoapExtensions[0], msi.SoapExtensions, type_info.SoapExtensions[1]); ainfo.Request.BeginGetRequestStream (new AsyncCallback (AsyncGetRequestStreamDone), ainfo); } catch (Exception ex) { if (ainfo != null) ainfo.SetCompleted (null, ex, false); } return ainfo; }
protected IAsyncResult BeginInvoke(string methodName, object[] parameters, AsyncCallback callback, object asyncState) { SoapMethodStubInfo msi = (SoapMethodStubInfo)type_info.GetMethod(methodName); SoapWebClientAsyncResult ainfo = null; try { SoapClientMessage message = new SoapClientMessage(this, msi, Url, parameters); message.CollectHeaders(this, message.MethodStubInfo.Headers, SoapHeaderDirection.In); WebRequest request = GetRequestForMessage(uri, message); ainfo = new SoapWebClientAsyncResult(request, callback, asyncState); ainfo.Message = message; ainfo.Extensions = SoapExtension.CreateExtensionChain(type_info.SoapExtensions[0], msi.SoapExtensions, type_info.SoapExtensions[1]); ainfo.Request.BeginGetRequestStream(new AsyncCallback(AsyncGetRequestStreamDone), ainfo); RegisterMapping(asyncState, ainfo); } catch (Exception ex) { if (ainfo != null) { ainfo.SetCompleted(null, ex, false); } } return(ainfo); }
protected object[] EndInvoke(IAsyncResult asyncResult) { if (!(asyncResult is SoapWebClientAsyncResult)) { throw new ArgumentException("asyncResult is not the return value from BeginInvoke"); } SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult)asyncResult; lock (ainfo) { if (!ainfo.IsCompleted) { ainfo.WaitForComplete(); } UnregisterMapping(ainfo.AsyncState); if (ainfo.Exception != null) { throw ainfo.Exception; } else { return((object[])ainfo.Result); } } }
void AsyncGetResponseDone(IAsyncResult ar) { SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult)ar.AsyncState; WebResponse response = null; try { response = GetWebResponse(ainfo.Request, ar); } catch (WebException ex) { response = ex.Response; HttpWebResponse http_response = response as HttpWebResponse; if (http_response == null || http_response.StatusCode != HttpStatusCode.InternalServerError) { ainfo.SetCompleted(null, ex, true); return; } } catch (Exception ex) { ainfo.SetCompleted(null, ex, true); return; } try { object[] result = ReceiveResponse(response, ainfo.Message, ainfo.Extensions); ainfo.SetCompleted(result, null, true); } catch (Exception ex) { ainfo.SetCompleted(null, ex, true); } finally { response.Close(); } }
void AsyncGetRequestStreamDone(IAsyncResult ar) { SoapWebClientAsyncResult ainfo = (SoapWebClientAsyncResult)ar.AsyncState; try { SendRequest(ainfo.Request.EndGetRequestStream(ar), ainfo.Message, ainfo.Extensions); ainfo.Request.BeginGetResponse(new AsyncCallback(AsyncGetResponseDone), ainfo); } catch (Exception ex) { ainfo.SetCompleted(null, ex, true); } }
void InvokeAsyncCallback(IAsyncResult ar) { InvokeAsyncInfo info = (InvokeAsyncInfo)ar.AsyncState; SoapWebClientAsyncResult sar = (SoapWebClientAsyncResult)ar; InvokeCompletedEventArgs args = new InvokeCompletedEventArgs(sar.Exception, false, info.UserState, (object[])sar.Result); if (info.Context != null) { info.Context.Send(info.Callback, args); } else { info.Callback(args); } }