Ejemplo n.º 1
0
 private static void ReadCallBack(IAsyncResult asyncResult)
 {
     JsonWebRequest.RequestState asyncState = (JsonWebRequest.RequestState)asyncResult.AsyncState;
     try
     {
         Stream streamResponse = asyncState.streamResponse;
         int    count          = streamResponse.EndRead(asyncResult);
         if (count > 0)
         {
             asyncState.readBytes.AddRange(((IEnumerable <byte>)asyncState.BufferRead).Take <byte>(count));
             streamResponse.BeginRead(asyncState.BufferRead, 0, 5000, new AsyncCallback(JsonWebRequest.ReadCallBack), asyncState);
         }
         else
         {
             string stringContent = Encoding.UTF8.GetString(asyncState.readBytes.ToArray(), 0, asyncState.readBytes.Count);
             JsonWebRequest.SafeClose(asyncState);
             Logger.Instance.Info("<<<<<<<<<<<<JSONWebRequest duration {0} ms. URI {1} ---->>>>> {2}", (DateTime.Now - asyncState.startTime).TotalMilliseconds, ((WebRequest)asyncState.request).RequestUri.OriginalString, stringContent);
             JsonWebRequest.SafeInvokeCallback(asyncState.resultCallback, true, stringContent);
         }
     }
     catch (Exception ex)
     {
         Logger.Instance.Error("ReadCallBack failed.", ex);
         JsonWebRequest.SafeClose(asyncState);
         JsonWebRequest.SafeInvokeCallback(asyncState.resultCallback, false, null);
     }
 }
Ejemplo n.º 2
0
 public static void SendHTTPRequestAsync(string baseUri, Dictionary <string, string> parameters, Action <JsonResponseData> resultCallback, bool usePost = true, bool lowPriority = false, bool pageDataRequest = true)
 {
     if (lowPriority)
     {
         Action <Action> action = (Action <Action>)(a => JsonWebRequest.SendHTTPRequestAsync(baseUri, parameters, (Action <JsonResponseData>)(res =>
         {
             a();
             resultCallback(res);
         }), usePost, false, true));
         JsonWebRequest._lowPriorityQueue.AddToDelayedExecutionQueue(action, baseUri);
     }
     else
     {
         Logger.Instance.Info(">>>>>>>>>>>>>>>Starting GETAsync concurrentRequestsNo = {0} ; baseUri = {1}; parameters = {2}", JsonWebRequest._currentNumberOfRequests, baseUri, JsonWebRequest.GetAsLogString(parameters));
         Interlocked.Increment(ref JsonWebRequest._currentNumberOfRequests);
         string queryString = JsonWebRequest.ConvertDictionaryToQueryString(parameters, true);
         JsonWebRequest.RequestState myRequestState = new JsonWebRequest.RequestState();
         try
         {
             myRequestState.resultCallback = resultCallback;
             string requestUriString = baseUri;
             if (!usePost && queryString.Length > 0)
             {
                 requestUriString = requestUriString + "?" + queryString;
             }
             HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(requestUriString);
             myHttpWebRequest.UserAgent = AppInfo.AppVersionForUserAgent;
             myRequestState.request     = myHttpWebRequest;
             if (usePost)
             {
                 myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
                 myHttpWebRequest.Method      = "POST";
                 myHttpWebRequest.BeginGetRequestStream((AsyncCallback)(ar =>
                 {
                     using (StreamWriter streamWriter = new StreamWriter(myHttpWebRequest.EndGetRequestStream(ar)))
                         streamWriter.Write(queryString);
                     myHttpWebRequest.BeginGetCompressedResponse(new AsyncCallback(JsonWebRequest.RespCallback), myRequestState);
                 }), null);
             }
             else
             {
                 myHttpWebRequest.BeginGetCompressedResponse(new AsyncCallback(JsonWebRequest.RespCallback), myRequestState);
             }
         }
         catch (Exception ex)
         {
             Logger.Instance.Error("GetJsonAsync failed.", ex);
             JsonWebRequest.SafeClose(myRequestState);
             JsonWebRequest.SafeInvokeCallback(myRequestState.resultCallback, false, null);
         }
     }
 }
Ejemplo n.º 3
0
 public static void Upload(string uri, Stream data, string paramName, string uploadContentType, Action <JsonResponseData> resultCallback, string fileName = null, Action <double> progressCallback = null, Cancellation c = null)
 {
     JsonWebRequest.RequestState rState = new JsonWebRequest.RequestState()
     {
         resultCallback = resultCallback
     };
     try
     {
         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
         request.AllowWriteStreamBuffering = false;
         request.UserAgent = AppInfo.AppVersionForUserAgent;
         rState.request    = request;
         request.Method    = "POST";
         string str1 = string.Format("----------{0:N}", Guid.NewGuid());
         string str2 = "multipart/form-data; boundary=" + str1;
         request.ContentType     = str2;
         request.CookieContainer = new CookieContainer();
         string header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\";\r\nContent-Type: {3}\r\n\r\n", str1, paramName, (fileName ?? "myDataFile"), uploadContentType);
         string footer = string.Format("\r\n--{0}--\r\n", str1);
         request.ContentLength = ((long)Encoding.UTF8.GetByteCount(header) + data.Length + (long)Encoding.UTF8.GetByteCount(footer));
         request.BeginGetRequestStream((AsyncCallback)(ar =>
         {
             try
             {
                 Stream requestStream = request.EndGetRequestStream(ar);
                 requestStream.Write(Encoding.UTF8.GetBytes(header), 0, Encoding.UTF8.GetByteCount(header));
                 StreamUtils.CopyStream(data, requestStream, progressCallback, c, 0L);
                 requestStream.Write(Encoding.UTF8.GetBytes(footer), 0, Encoding.UTF8.GetByteCount(footer));
                 requestStream.Close();
                 request.BeginGetResponse(new AsyncCallback(JsonWebRequest.RespCallback), rState);
             }
             catch (Exception ex)
             {
                 Logger.Instance.Error("Upload failed to write data to request stream.", ex);
                 JsonWebRequest.SafeClose(rState);
                 JsonWebRequest.SafeInvokeCallback(rState.resultCallback, false, null);
             }
         }), null);
     }
     catch (Exception ex)
     {
         Logger.Instance.Error("Upload failed.", ex);
         JsonWebRequest.SafeClose(rState);
         JsonWebRequest.SafeInvokeCallback(rState.resultCallback, false, null);
     }
 }
Ejemplo n.º 4
0
 private static void RespCallback(IAsyncResult asynchronousResult)
 {
     JsonWebRequest.RequestState asyncState = (JsonWebRequest.RequestState)asynchronousResult.AsyncState;
     try
     {
         HttpWebRequest request = asyncState.request;
         asyncState.response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
         Stream compressedResponseStream = asyncState.response.GetCompressedResponseStream();
         asyncState.streamResponse = compressedResponseStream;
         compressedResponseStream.BeginRead(asyncState.BufferRead, 0, 5000, new AsyncCallback(JsonWebRequest.ReadCallBack), asyncState);
     }
     catch (WebException ex1)
     {
         Logger.Instance.Error(string.Format("RespCallback failed. Got httpWebResponse = {0} , uri = {1}", (ex1.Response is HttpWebResponse), ((WebRequest)asyncState.request).RequestUri), (Exception)ex1);
         if (ex1.Response is HttpWebResponse && ex1.Response.ContentLength > 0L)
         {
             WebResponse response = ex1.Response;
             asyncState.response = ex1.Response as HttpWebResponse;
             try
             {
                 Stream compressedResponseStream = asyncState.response.GetCompressedResponseStream();
                 asyncState.streamResponse = compressedResponseStream;
                 compressedResponseStream.BeginRead(asyncState.BufferRead, 0, 5000, new AsyncCallback(JsonWebRequest.ReadCallBack), asyncState);
             }
             catch (Exception ex2)
             {
                 Logger.Instance.Error(string.Format("RespCallback failed. Uri ={0}", ((WebRequest)asyncState.request).RequestUri), ex2);
                 JsonWebRequest.SafeClose(asyncState);
                 JsonWebRequest.SafeInvokeCallback(asyncState.resultCallback, false, null);
             }
         }
         else
         {
             JsonWebRequest.SafeClose(asyncState);
             JsonWebRequest.SafeInvokeCallback(asyncState.resultCallback, false, null);
         }
     }
     catch (Exception ex)
     {
         Logger.Instance.Error(string.Format("RespCallback failed. Uri ={0}", ((WebRequest)asyncState.request).RequestUri), ex);
         JsonWebRequest.SafeClose(asyncState);
         JsonWebRequest.SafeInvokeCallback(asyncState.resultCallback, false, null);
     }
 }
Ejemplo n.º 5
0
 private static void SafeClose(JsonWebRequest.RequestState state)
 {
     try
     {
         if (state.streamResponse != null)
         {
             state.streamResponse.Close();
         }
         if (state.response == null)
         {
             return;
         }
         state.response.Close();
     }
     catch (Exception ex)
     {
         Logger.Instance.Error("SafeClose failed.", ex);
     }
 }
Ejemplo n.º 6
0
 public static void SendHTTPRequestAsync(string uri, Action <JsonResponseData> resultCallback, Dictionary <string, object> postData = null)
 {
     Logger.Instance.Info("Starting GetJsonAsync for uri = {0}", uri);
     Interlocked.Increment(ref JsonWebRequest._currentNumberOfRequests);
     JsonWebRequest.RequestState myRequestState = new JsonWebRequest.RequestState();
     try
     {
         myRequestState.resultCallback = resultCallback;
         HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
         myHttpWebRequest.UserAgent = AppInfo.AppVersionForUserAgent;
         myRequestState.request     = myHttpWebRequest;
         if (postData != null)
         {
             string boundary = string.Format("----------{0:N}", Guid.NewGuid());
             string str      = "multipart/form-data; boundary=" + boundary;
             byte[] formData = JsonWebRequest.GetMultipartFormData(postData, boundary);
             myHttpWebRequest.Method          = "POST";
             myHttpWebRequest.ContentType     = str;
             myHttpWebRequest.CookieContainer = new CookieContainer();
             myHttpWebRequest.BeginGetRequestStream((AsyncCallback)(ar =>
             {
                 Stream requestStream = myHttpWebRequest.EndGetRequestStream(ar);
                 byte[] buffer = formData;
                 int offset = 0;
                 int length = formData.Length;
                 requestStream.Write(buffer, offset, length);
                 requestStream.Close();
                 myHttpWebRequest.BeginGetResponse(new AsyncCallback(JsonWebRequest.RespCallback), myRequestState);
             }), null);
         }
         else
         {
             myHttpWebRequest.BeginGetResponse(new AsyncCallback(JsonWebRequest.RespCallback), myRequestState);
         }
     }
     catch (Exception ex)
     {
         Logger.Instance.Error("GetJsonAsync failed.", ex);
         JsonWebRequest.SafeClose(myRequestState);
         JsonWebRequest.SafeInvokeCallback(myRequestState.resultCallback, false, null);
     }
 }