private AsyncRequestResult BeginPostSerializableTTOut <T, TOut>(String controller, String action, String parameters, T value, RequestCompleted <TOut> callback, object asyncState, bool needResponseData) where T : APIBaseRequest { byte[] bytedata; var request = PreparePostRequest(controller, action, parameters, value, out bytedata); var data = new AsyncGetObject <TOut>(request, callback, asyncState); AsyncCallback asyncCallBack; if (needResponseData) { asyncCallBack = EndGetPostSerializableT <TOut>; } else { asyncCallBack = EndGetPostSerializableNoData; } RequestData <TOut> rqd = new RequestData <TOut> { Data = bytedata, AsyncData = data, Callback = asyncCallBack }; request.BeginGetRequestStream(EndGetRequestStream <TOut>, rqd); return(new AsyncRequestResult(request)); }
private AsyncRequestResult BeginGetSerializableT <T>(String controller, String action, String parameters, RequestCompleted <T> callback, object asyncState) { var request = GetApiRequest(controller, action, parameters); AsyncGetObject <T> data = new AsyncGetObject <T>(request, callback, asyncState); request.BeginGetResponse(EndGetPostSerializableT <T>, data); return(new AsyncRequestResult(request)); }
private static void EndGetPostSerializableT <T>(IAsyncResult res, bool hasResultData) { #if DEBUG Thread.Sleep(1500); #endif AsyncGetObject <T> state = (AsyncGetObject <T>)res.AsyncState; HttpWebResponse response; try { response = (HttpWebResponse)state.Request.EndGetResponse(res); } catch (ObjectDisposedException) { if (state.Callback != null) { state.Callback(default(T), RequestResult.Exit, HttpStatusCode.InternalServerError, null, state.AsyncState); } return; } catch (Exception ex) { if (state.Callback != null) { state.Callback(default(T), RequestResult.Error, HttpStatusCode.InternalServerError, ex, state.AsyncState); return; } else { throw; } } T result = default(T); bool scs; if (hasResultData) { XmlSerializer ser = SerializingHelper.GetSerializer(typeof(T)); scs = false; try { using (var stream = response.GetResponseStream()) { result = (T)ser.Deserialize(stream); scs = true; } } catch (Exception ex) { if (state.Callback != null) { state.Callback(default(T), RequestResult.Error, response.StatusCode, ex, state.AsyncState); } else { throw; } } } else { scs = true; } if (scs && state.Callback != null) { state.Callback(result, RequestResult.Success, response.StatusCode, null, state.AsyncState); } }