コード例 #1
0
ファイル: ServiceClient.cs プロジェクト: parastoo-62/autorest
        protected void InitializeHttpClient(HttpClientHandler httpClientHandler, params DelegatingHandler[] handlers)
        {
            HttpClientHandler = httpClientHandler;
            DelegatingHandler currentHandler = new RetryDelegatingHandler();

            currentHandler.InnerHandler = HttpClientHandler;

            if (handlers != null)
            {
                for (int i = handlers.Length - 1; i >= 0; --i)
                {
                    DelegatingHandler handler = handlers[i];
                    // Non-delegating handlers are ignored since we always
                    // have RetryDelegatingHandler as the outer-most handler
                    while (handler.InnerHandler is DelegatingHandler)
                    {
                        handler = handler.InnerHandler as DelegatingHandler;
                    }
                    handler.InnerHandler = currentHandler;
                    currentHandler       = handlers[i];
                }
            }

            var newClient = new HttpClient(currentHandler, false);

            FirstMessageHandler = currentHandler;
            HttpClient          = newClient;
            Type type = this.GetType();

            HttpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(type.FullName,
                                                                                      GetClientVersion()));
        }
コード例 #2
0
        /// <summary>
        /// Creates <see cref="DelegatingHandler"/> pipeline chain that will be used for further communication. The handlers are invoked in a top-down fashion. That is, the first entry is invoked first for
        /// an outbound request message but last for an inbound response message.
        /// </summary>
        /// <param name="httpClientHandler">HttpClientHandler</param>
        /// <param name="handlers">List of handlers from top to bottom (outer handler is the first in the list)</param>
        /// <returns></returns>
        protected virtual DelegatingHandler CreateHttpHandlerPipeline(HttpClientHandler httpClientHandler, params DelegatingHandler[] handlers)
        {
            // Now, the RetryAfterDelegatingHandler should be the absoulte outermost handler
            // because it's extremely lightweight and non-interfering
            DelegatingHandler currentHandler =
                new RetryDelegatingHandler(new RetryAfterDelegatingHandler {
                InnerHandler = httpClientHandler
            });

            if (handlers != null)
            {
                for (int i = handlers.Length - 1; i >= 0; --i)
                {
                    DelegatingHandler handler = handlers[i];
                    // Non-delegating handlers are ignored since we always
                    // have RetryDelegatingHandler as the outer-most handler
                    while (handler.InnerHandler is DelegatingHandler)
                    {
                        handler = handler.InnerHandler as DelegatingHandler;
                    }

                    handler.InnerHandler = currentHandler;
                    currentHandler       = handlers[i];
                }
            }

            return(currentHandler);
        }
コード例 #3
0
        /// <summary>
        /// Sets retry policy for the client.
        /// </summary>
        /// <param name="retryPolicy">Retry policy to set.</param>
        public virtual void SetRetryPolicy(RetryPolicy retryPolicy)
        {
            if (retryPolicy == null)
            {
                retryPolicy = new RetryPolicy <TransientErrorIgnoreStrategy>(0);
            }

            RetryDelegatingHandler delegatingHandler =
                HttpMessageHandlers.OfType <RetryDelegatingHandler>().FirstOrDefault();

            if (delegatingHandler != null)
            {
                delegatingHandler.RetryPolicy = retryPolicy;
            }
            else
            {
                throw new InvalidOperationException(ClientRuntime.Properties.Resources.ExceptionRetryHandlerMissing);
            }
        }
コード例 #4
0
ファイル: ServiceClient.cs プロジェクト: stuartleeks/autorest
        /// <summary>
        /// Sets retry policy for the client.
        /// </summary>
        /// <param name="retryPolicy">Retry policy to set.</param>
        public virtual void SetRetryPolicy(RetryPolicy retryPolicy)
        {
            if (retryPolicy == null)
            {
                throw new ArgumentNullException("retryPolicy");
            }

            RetryDelegatingHandler delegatingHandler =
                HttpMessageHandlers.OfType <RetryDelegatingHandler>().FirstOrDefault();

            if (delegatingHandler != null)
            {
                delegatingHandler.RetryPolicy = retryPolicy;
            }
            else
            {
                throw new InvalidOperationException(Properties.Resources.ExceptionRetryHandlerMissing);
            }
        }