GetCachedResponse() private method

private GetCachedResponse ( HttpJsonRequest httpJsonRequest, NameValueCollection additionalHeaders = null ) : RavenJToken
httpJsonRequest HttpJsonRequest
additionalHeaders System.Collections.Specialized.NameValueCollection
return RavenJToken
Ejemplo n.º 1
0
        /// <summary>
        /// Begins the read response string.
        /// </summary>
        public async Task <RavenJToken> ReadResponseJsonAsync()
        {
            if (SkipServerCheck)
            {
                var cachedResult = factory.GetCachedResponse(this);
                factory.InvokeLogRequest(owner, () => new RequestResultArgs
                {
                    DurationMilliseconds = CalculateDuration(),
                    Method     = Method,
                    HttpResult = (int)ResponseStatusCode,
                    Status     = RequestStatus.AggressivelyCached,
                    Result     = cachedResult.ToString(),
                    Url        = Url,
                    PostedData = postedData
                });
                return(cachedResult);
            }

            if (writeCalled)
            {
                return(await ReadJsonInternalAsync().ConfigureAwait(false));
            }

            var result = await SendRequestInternal(() => new HttpRequestMessage(new HttpMethod(Method), Url)).ConfigureAwait(false);

            if (result != null)
            {
                return(result);
            }
            return(await ReadJsonInternalAsync().ConfigureAwait(false));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Begins the read response string.
        /// </summary>
        public Task <RavenJToken> ReadResponseJsonAsync()
        {
            if (SkipServerCheck)
            {
                var tcs            = new TaskCompletionSource <RavenJToken>();
                var cachedResponse = factory.GetCachedResponse(this);
                factory.InvokeLogRequest(owner, () => new RequestResultArgs
                {
                    DurationMilliseconds = CalculateDuration(),
                    Method     = webRequest.Method,
                    HttpResult = (int)ResponseStatusCode,
                    Status     = RequestStatus.AggressivelyCached,
                    Result     = cachedResponse.ToString(),
                    Url        = webRequest.RequestUri.PathAndQuery,
                    PostedData = postedData
                });
                tcs.SetResult(cachedResponse);
                return(tcs.Task);
            }

            return(InternalReadResponseStringAsync(retries: 0));
        }
Ejemplo n.º 3
0
        private string ReadStringInternal(Func <WebResponse> getResponse)
        {
            WebResponse response;

            try
            {
                response = getResponse();
            }
            catch (WebException e)
            {
                var httpWebResponse = e.Response as HttpWebResponse;
                if (httpWebResponse == null ||
                    httpWebResponse.StatusCode == HttpStatusCode.NotFound ||
                    httpWebResponse.StatusCode == HttpStatusCode.Conflict)
                {
                    throw;
                }

                if (httpWebResponse.StatusCode == HttpStatusCode.NotModified &&
                    CachedRequestDetails != null)
                {
                    return(factory.GetCachedResponse(this));
                }

                using (var sr = new StreamReader(e.Response.GetResponseStreamWithHttpDecompression()))
                {
                    throw new InvalidOperationException(sr.ReadToEnd(), e);
                }
            }

            ResponseHeaders    = response.Headers;
            ResponseStatusCode = ((HttpWebResponse)response).StatusCode;
            using (var responseStream = response.GetResponseStreamWithHttpDecompression())
            {
                var reader = new StreamReader(responseStream);
                var text   = reader.ReadToEnd();
                reader.Close();
                factory.CacheResponse(response, text, this);
                return(text);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Begins the read response string.
        /// </summary>
        public async Task <RavenJToken> ReadResponseJsonAsync()
        {
            if (SkipServerCheck)
            {
                var result = factory.GetCachedResponse(this);
                factory.InvokeLogRequest(owner, () => new RequestResultArgs
                {
                    DurationMilliseconds = CalculateDuration(),
                    Method     = webRequest.Method,
                    HttpResult = (int)ResponseStatusCode,
                    Status     = RequestStatus.AggressivelyCached,
                    Result     = result.ToString(),
                    Url        = webRequest.RequestUri.PathAndQuery,
                    PostedData = postedData
                });
                return(result);
            }

            int retries = 0;

            while (true)
            {
                WebException    webException;
                HttpWebResponse httpWebResponse;

                try
                {
                    if (writeCalled == false)
                    {
                        webRequest.ContentLength = 0;
                    }
                    return(await ReadJsonInternalAsync(webRequest.GetResponseAsync()));
                }
                catch (WebException e)
                {
                    if (++retries >= 3 || disabledAuthRetries)
                    {
                        throw;
                    }

                    httpWebResponse = e.Response as HttpWebResponse;
                    if (httpWebResponse == null ||
                        (httpWebResponse.StatusCode != HttpStatusCode.Unauthorized &&
                         httpWebResponse.StatusCode != HttpStatusCode.Forbidden &&
                         httpWebResponse.StatusCode != HttpStatusCode.PreconditionFailed))
                    {
                        throw;
                    }

                    webException = e;
                }

                if (httpWebResponse.StatusCode == HttpStatusCode.Forbidden)
                {
                    await HandleForbiddenResponseAsync(httpWebResponse);

                    await new CompletedTask(webException).Task;                     // Throws, preserving original stack
                }

                if (await HandleUnauthorizedResponseAsync(httpWebResponse) == false)
                {
                    await new CompletedTask(webException).Task;                     // Throws, preserving original stack
                }
            }
        }