예제 #1
0
        public async Task <string> GetAsync(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var wr = PrepareGetWebRequest(relativeUrl, parameters);

            try
            {
                var response = await GetResponseAsync(wr.request);

                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(wr.uri.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            }
            catch (WebException e)
            {
                if (e.Response != null)
                {
                    using (e.Response)
                    {
                        var r = new HttpWebResponseAdapter(e.Response);
                        if (r.StatusCode == HttpStatusCode.NotModified)
                        {
                            return(wr.cache.Data);
                        }
                        using (var s = e.Response.GetResponseStream())
                            using (var sr = new StreamReader(s))
                            {
                                throw new SolrConnectionException(await sr.ReadToEndAsync(), e, wr.uri.Uri.ToString());
                            }
                    }
                }
                throw new SolrConnectionException(e, wr.uri.Uri.ToString());
            }
        }
예제 #2
0
        public string Get(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            if (Certificate != null)
            {
                request.ProtocolVersion = HttpVersion.Version10;
                request.PreAuthenticate = true;
                request.ClientCertificates.Add(Certificate);
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol  = SecurityProtocolType.Ssl3;
                ServicePointManager.ServerCertificateValidationCallback += AcceptSelfSignedCertificate;
            }
            try {
                var response = GetResponse(request);
                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(u.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            } catch (WebException e) {
                if (e.Response != null)
                {
                    using (e.Response) {
                        var r = new HttpWebResponseAdapter(e.Response);
                        if (r.StatusCode == HttpStatusCode.NotModified)
                        {
                            return(cached.Data);
                        }
                        using (var s = e.Response.GetResponseStream())
                            using (var sr = new StreamReader(s)) {
                                throw new SolrConnectionException(sr.ReadToEnd(), e, u.Uri.ToString());
                            }
                    }
                }
                throw new SolrConnectionException(e, u.Uri.ToString());
            }
        }
예제 #3
0
        public string Get(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            try {
                var response = GetResponse(request);
                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(u.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            } catch (WebException e) {
                var msg = e.Message;

                if (e.Response != null)
                {
                    HttpStatusCode solrHttpStatusCode;
                    using (e.Response)
                    {
                        var r = new HttpWebResponseAdapter(e.Response);
                        solrHttpStatusCode = r.StatusCode;
                        if (solrHttpStatusCode == HttpStatusCode.NotModified)
                        {
                            return(cached.Data);
                        }

                        using (var s = e.Response.GetResponseStream())
                            using (var sr = new StreamReader(s))
                                msg = sr.ReadToEnd();
                    }

                    throw new SolrConnectionException(msg, e, u.Uri.ToString(), solrHttpStatusCode);
                }

                throw new SolrConnectionException(msg, e, u.Uri.ToString());
            }
        }
예제 #4
0
        public string Get(string relativeUrl, IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var u = new UriBuilder(serverURL);

            u.Path += relativeUrl;
            u.Query = GetQuery(parameters);

            var request = HttpWebRequestFactory.Create(u.Uri);

            request.Method    = HttpWebRequestMethod.GET;
            request.KeepAlive = true;

            //Issue request headers to say we can accept a compressed response
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");

            var cached = Cache[u.Uri.ToString()];

            if (cached != null)
            {
                request.Headers.Add(HttpRequestHeader.IfNoneMatch, cached.ETag);
            }
            if (Timeout > 0)
            {
                request.ReadWriteTimeout = Timeout;
                request.Timeout          = Timeout;
            }
            try {
                var response = GetResponse(request);
                if (response.ETag != null)
                {
                    Cache.Add(new SolrCacheEntity(u.Uri.ToString(), response.ETag, response.Data));
                }
                return(response.Data);
            } catch (WebException e) {
                if (e.Response != null)
                {
                    var r = new HttpWebResponseAdapter(e.Response);
                    if (r.StatusCode == HttpStatusCode.NotModified)
                    {
                        return(cached.Data);
                    }
                    if (r.StatusCode == HttpStatusCode.BadRequest)
                    {
                        throw new InvalidFieldException(r.StatusDescription, e);
                    }
                }
                throw new SolrConnectionException(e);
            }
        }