protected IAsyncResult BeginInvoke(string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState) { HttpSimpleMethodStubInfo method = (HttpSimpleMethodStubInfo)TypeStub.GetMethod(methodName); SimpleWebClientAsyncResult ainfo = null; try { MimeParameterWriter parameterWriter = (MimeParameterWriter)method.ParameterWriterType.Create(); string url = parameterWriter.GetRequestUrl(requestUrl, parameters); WebRequest req = GetWebRequest(new Uri(url)); ainfo = new SimpleWebClientAsyncResult(req, callback, asyncState); ainfo.Parameters = parameters; ainfo.ParameterWriter = parameterWriter; ainfo.Method = method; ainfo.Request = req; ainfo.Request.BeginGetRequestStream(new AsyncCallback(AsyncGetRequestStreamDone), ainfo); RegisterMapping(asyncState, ainfo); } catch (Exception ex) { if (ainfo != null) { ainfo.SetCompleted(null, ex, false); } else { throw ex; } } return(ainfo); }
protected object EndInvoke(IAsyncResult asyncResult) { if (!(asyncResult is SimpleWebClientAsyncResult)) { throw new ArgumentException("asyncResult is not the return value from BeginInvoke"); } SimpleWebClientAsyncResult ainfo = (SimpleWebClientAsyncResult)asyncResult; lock (ainfo) { if (!ainfo.IsCompleted) { ainfo.WaitForComplete(); } UnregisterMapping(ainfo.AsyncState); if (ainfo.Exception != null) { throw ainfo.Exception; } else { return(ainfo.Result); } } }
void AsyncGetResponseDone(IAsyncResult ar) { SimpleWebClientAsyncResult ainfo = (SimpleWebClientAsyncResult)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 { MimeReturnReader returnReader = (MimeReturnReader)ainfo.Method.ReturnReaderType.Create(); object result = returnReader.Read(response, response.GetResponseStream()); ainfo.SetCompleted(result, null, true); } catch (Exception ex) { ainfo.SetCompleted(null, ex, true); } }
protected IAsyncResult BeginInvoke (string methodName, string requestUrl, object[] parameters, AsyncCallback callback, object asyncState) { HttpSimpleMethodStubInfo method = (HttpSimpleMethodStubInfo) TypeStub.GetMethod (methodName); SimpleWebClientAsyncResult ainfo = null; try { MimeParameterWriter parameterWriter = (MimeParameterWriter) method.ParameterWriterType.Create (); string url = parameterWriter.GetRequestUrl (requestUrl, parameters); WebRequest req = GetWebRequest (new Uri(url)); ainfo = new SimpleWebClientAsyncResult (req, callback, asyncState); ainfo.Parameters = parameters; ainfo.ParameterWriter = parameterWriter; ainfo.Method = method; ainfo.Request = req; ainfo.Request.BeginGetRequestStream (new AsyncCallback (AsyncGetRequestStreamDone), ainfo); RegisterMapping (asyncState, ainfo); } catch (Exception ex) { if (ainfo != null) ainfo.SetCompleted (null, ex, false); else throw ex; } return ainfo; }
void InvokeAsyncCallback(IAsyncResult ar) { InvokeAsyncInfo info = (InvokeAsyncInfo)ar.AsyncState; SimpleWebClientAsyncResult sar = (SimpleWebClientAsyncResult)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); } }
void AsyncGetRequestStreamDone(IAsyncResult ar) { SimpleWebClientAsyncResult ainfo = (SimpleWebClientAsyncResult)ar.AsyncState; try { if (ainfo.ParameterWriter.UsesWriteRequest) { Stream stream = ainfo.Request.GetRequestStream(); ainfo.ParameterWriter.WriteRequest(stream, ainfo.Parameters); stream.Close(); } ainfo.Request.BeginGetResponse(new AsyncCallback(AsyncGetResponseDone), ainfo); } catch (Exception ex) { ainfo.SetCompleted(null, ex, true); } }