Beispiel #1
0
 private static void HttpAsyncRequest_TimeoutCallback(object state, bool timedOut)
 {
     if (timedOut)
     {
         HttpAsyncRequestState requestState = state as HttpAsyncRequestState;
         if (requestState != null)
         {
             requestState.Request.Abort();
         }
     }
 }
Beispiel #2
0
        private static void HttpAsyncRequest_RespCallback(IAsyncResult asyncResult)
        {
            WebResponse resp = null;
            HttpAsyncRequestState requestState = null;
            try
            {
                string result = null;

                requestState = asyncResult.AsyncState as HttpAsyncRequestState;
                resp = requestState.Request.EndGetResponse(asyncResult);

                using (StreamReader sr = new StreamReader(resp.GetResponseStream(), requestState.RespEncoding))
                {
                    result = sr.ReadToEnd();
                    sr.Close();
                }

                if (requestState.RespResult != null)
                {
                    requestState.RespResult(result, resp, null);
                }
            }
            catch (Exception ex)
            {
                if (requestState != null && requestState.RespResult != null)
                {
                    requestState.RespResult(null, resp, ex);
                }
            }
            finally
            {
                if (resp != null)
                {
                    resp.Close();
                    resp = null;
                }
            }
        }
Beispiel #3
0
        public static void HttpAsyncRequest(HttpWebRequest request, Encoding responseEncoding, int timeoutInSecond, ResponseResult responseResult)
        {
            HttpAsyncRequestState requestState = new HttpAsyncRequestState()
            {
                Request = request,
                RespResult = responseResult,
                RespEncoding = responseEncoding,
            };

            try
            {
                // Start the asynchronous request.
                IAsyncResult asyncResult = request.BeginGetResponse(HttpAsyncRequest_RespCallback, requestState);

                ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(HttpAsyncRequest_TimeoutCallback), requestState, timeoutInSecond * 1000, true);
            }
            catch (WebException ex)
            {
                if (requestState.RespResult != null)
                {
                    requestState.RespResult(null, ex.Response as HttpWebResponse, ex);
                }
            }
        }