private async Task <IHttpWebResponse> GetResponseAsync(WebRequest rawRequest) { var timer = new Timer(_config.Advanced.RequestTimeout.TotalMilliseconds); timer.Elapsed += (sender, args) => rawRequest.Abort(); try { timer.Start(); var response = await Task <WebResponse> .Factory.FromAsync(rawRequest.BeginGetResponse, rawRequest.EndGetResponse, rawRequest); return(new HttpWebResponse((System.Net.HttpWebResponse)response)); } catch (WebException e) { if (e.Status == WebExceptionStatus.RequestCanceled) { var timeoutResponse = new HttpWebResponse { ContentType = ContentTypes.TextPlain }; timeoutResponse.SetResponseStream(new MemoryStream(Encoding.UTF8.GetBytes(string.Format(_timeOutResponse, rawRequest.RequestUri.AbsolutePath, _config.Advanced.RequestTimeout.TotalMilliseconds)))); return(timeoutResponse); } return(new HttpWebResponse((System.Net.HttpWebResponse)e.Response)); } finally { timer.Close(); timer.Stop(); timer.Dispose(); } }
public void Setup() { _supported = new List <ContentType> { ContentType.ApplicationXml, ContentType.ApplicationJson }; _negotiator = new ContentNegotiator(_supported); _response = new HttpWebResponse { Headers = new WebHeaderCollection { { HttpRequestHeader.Accept, "application/json" } }, StatusCode = HttpStatusCode.UnsupportedMediaType }; }