Example #1
0
		private static void ProcessResponse(IAsyncResult asyncResult, WebRequest request, HttpResponse resp, Action<HttpResponse> action)
		{
			lock (pendingRequests)
			{
				if (pendingRequests.Contains(resp))
					pendingRequests.Remove(resp);
			}
			
			try
			{
				var response = request.EndGetResponse(asyncResult);
				resp.IsConnected = true; 
				LoadResponse(resp, response);
			}
			catch (Exception exception)
			{
				if (exception is WebException)
				{
					var response = ((WebException)exception).Response as HttpWebResponse;
					if (response != null)
					{
						resp.HttpStatusCode = response.StatusCode;
						
						try { LoadResponse(resp, response); }
						catch { }
						
						exception = new HttpStatusException(exception.Message)
						{
							Result = resp, 
							WebException = (WebException) exception
						};
					}
				}

				if (resp.ResponseStream != null)
				{
					using (resp.ResponseStream)
						resp.RawResponse = resp.ResponseStream.ReadToEnd();
				}

				resp.Exception = exception; 
				if (action != null)
					action(resp);
				return;
			}

			if (action != null)
				action(resp);
		}