Exemple #1
0
        internal static RequestLimiter GetRequestLimiter(HttpWebRequest request)
        {
            var    uriParts = request.RequestUri.AbsoluteUri.Split('/');
            string entity   = uriParts[uriParts.Length - 1];
            string method   = uriParts[uriParts.Length - 2];

            Key key = new Key(method, entity);

            mutex.WaitOne();
            RequestLimiter requestLimiter;

            try
            {
                requestLimiter = DefaultExecutor.requestLimitGuard.Value[key];
            }
            //Fill requestLimitGuard with requestLimiter if it not exists
            //Maybe should be in another function
            catch (KeyNotFoundException)
            {
                requestLimiter = new RequestLimiter();
                DefaultExecutor.requestLimitGuard.Value.Add(key, requestLimiter);
            }
            mutex.ReleaseMutex();

            return(requestLimiter);
        }
Exemple #2
0
        public HttpWebResponse Execute(HttpWebRequest request)
        {
            RequestLimiter requestLimiter = GetRequestLimiter(request);

            //Blocks thread until another request is allowed
            requestLimiter.WaitForAllowing();
            return((HttpWebResponse)request.GetResponse());
        }
Exemple #3
0
        public HttpWebResponse ExecuteWithMaxReqPerSecond(HttpWebRequest request, uint maxReqPerSecond)
        {
            if (maxReqPerSecond == 0)
            {
                throw new ArgumentException();
            }

            RequestLimiter requestLimiter = GetRequestLimiter(request);

            //Blocks thread until another request is allowed
            requestLimiter.WaitForAllowing(maxReqPerSecond);
            return(this.Execute(request));
        }