static public void AsynPost(string url, byte[] data, ResponseCallback callback, object state, CookieCollection cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); if (cookie != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookie); } request.AllowAutoRedirect = true; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = data.Length; AsynResp resp = new AsynResp { Request = request, Callback = callback, Response = new ResponseObject { State = state } }; AsynRequestStream ars = new AsynRequestStream { Data = data, Resp = resp }; request.BeginGetRequestStream(new AsyncCallback(RequestStreamCallback), ars); }
private static void DoUserCallback(AsynResp ar) { if (ar.Callback != null) { ThreadPool.QueueUserWorkItem(new WaitCallback(UserCallback), ar); } }
private static void RespCallback(IAsyncResult ir) { AsynResp ar = (AsynResp)ir.AsyncState; try { HttpWebResponse resp = (HttpWebResponse)ar.Request.EndGetResponse(ir); ar.Request = null; if (ar.Callback != null) { ar.Response.Resp = resp; ar.RespStream = resp.GetResponseStream(); ar.Contents = new ArrayList(); ar.Current = new byte[1024]; if (ar.RespStream != null) { ar.RespStream.BeginRead(ar.Current, 0, ar.Current.Length, RespReadCallback, ar); } } } catch (Exception) { DoUserCallback(ar); } }
private static void UserCallback(object o) { AsynResp ar = (AsynResp)o; try { ar.Callback(ar.Response); } catch { } if (ar.Response.Resp != null) { ar.Response.Resp.Close(); } }
private static void UserCallback(object o) { AsynResp ar = (AsynResp)o; try { ar.Callback(ar.Response); } catch (Exception e) { //LogHelper.WriteLog(typeof(HttpWebAsk), LogStatusLevel.ERROR, e.Message); } if (ar.Response.Resp != null) { ar.Response.Resp.Close(); } }
private static void RespReadCallback(IAsyncResult ir) { AsynResp ar = (AsynResp)ir.AsyncState; try { int readed = ar.RespStream.EndRead(ir); if (readed >= ar.Current.Length) { ar.Contents.Add(ar.Current); ar.Current = new byte[1024]; ar.RespStream.BeginRead(ar.Current, 0, ar.Current.Length, new AsyncCallback(RespReadCallback), ar); return; } int length = ar.Contents.Count * 1024 + readed; if (length > 0) { ar.Response.Content = new byte[length]; int index = 0; foreach (byte[] bs in ar.Contents) { Array.Copy(bs, 0, ar.Response.Content, index, bs.Length); index += bs.Length; } if (readed > 0) { Array.Copy(ar.Current, 0, ar.Response.Content, index, readed); } } ar.Contents = null; ar.Current = null; ThreadPool.QueueUserWorkItem(new WaitCallback(UserCallback), ar); } catch (Exception e) { //LogHelper.WriteLog(typeof(HttpWebAsk), LogStatusLevel.ERROR, e.Message); DoUserCallback(ar); } }
private static void RespReadCallback(IAsyncResult ir) { AsynResp ar = (AsynResp)ir.AsyncState; try { int readed = ar.RespStream.EndRead(ir); if (readed >= ar.Current.Length) { ar.Contents.Add(ar.Current); ar.Current = new byte[1024]; ar.RespStream.BeginRead(ar.Current, 0, ar.Current.Length, RespReadCallback, ar); return; } int length = ar.Contents.Count * 1024 + readed; if (length > 0) { ar.Response.Content = new byte[length]; int index = 0; foreach (byte[] bs in ar.Contents) { Array.Copy(bs, 0, ar.Response.Content, index, bs.Length); index += bs.Length; } if (readed > 0) { Array.Copy(ar.Current, 0, ar.Response.Content, index, readed); } } ar.Contents = null; ar.Current = null; ThreadPool.QueueUserWorkItem(UserCallback, ar); } catch (Exception) { DoUserCallback(ar); } }
static public void AsynGet(string url, ResponseCallback callback, object state, CookieCollection cookie) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); if (cookie != null) { request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookie); } AsynResp resp = new AsynResp { Request = request, Callback = callback, Response = new ResponseObject { State = state } }; request.BeginGetResponse(new AsyncCallback(RespCallback), resp); }
private static void RespCallback(IAsyncResult ir) { AsynResp ar = (AsynResp)ir.AsyncState; try { HttpWebResponse resp = (HttpWebResponse)ar.Request.EndGetResponse(ir); ar.Request = null; if (ar.Callback != null) { ar.Response.Resp = resp; ar.RespStream = resp.GetResponseStream(); ar.Contents = new ArrayList(); ar.Current = new byte[1024]; ar.RespStream.BeginRead(ar.Current, 0, ar.Current.Length, new AsyncCallback(RespReadCallback), ar); } } catch (Exception e) { //LogHelper.WriteLog(typeof(HttpWebAsk), LogStatusLevel.ERROR, e.Message); DoUserCallback(ar); } }