Esempio n. 1
0
        private HttpResponseMessage TrySending(HttpRequestMessage request, HttpRequestMessageRequestDetails requestDetails, PipelineOptions options)
        {
            var adapter = _adapterFactory.CreateClient(options);
            HttpResponseMessage response;
            try
            {
                response = adapter.SendAsync(request).Result;
            }
            catch (AggregateException exception)
            {
                if (SendError != null)
                {
                    requestDetails = requestDetails ?? new HttpRequestMessageRequestDetails(request);
                    SendError(this, new RequestErrorEventArgs(requestDetails, exception.InnerException));
                }
                if (exception.InnerException is TaskCanceledException)
                {
                    throw new TimeoutException("The request timed out");
                }
                throw exception.InnerException;
            }

            if (Responded != null)
            {
                requestDetails = requestDetails ?? new HttpRequestMessageRequestDetails(request);
                Responded(this, new ResponseEventArgs(requestDetails, new HttpResponseMessageResponseDetails(requestDetails, response)));
            }
            ApplyPipelineToResponse(response, options);
            options.AssertAllRequestResponseOptionsWereUsed();
            return response;
        }
 public HttpClientAdapter CreateClient(PipelineOptions options)
 {
     AutoRedirect redirectOption = null;
     options.Use<AutoRedirect>(option => {
         redirectOption = option;
     });
     return new SystemNetHttpClientAdapter(redirectOption);
 }
Esempio n. 3
0
 public Response Send(HttpMethod method, string uri, BodyContent body, params PipelineOption[] overridingPipelineOptions)
 {
     var combinedOptions = new PipelineOptions(DefaultPipelineOptions.Concat(_ambientPipelineOptions.Concat(overridingPipelineOptions)));
     HttpRequestMessageRequestDetails requestDetails;
     var request = CreateRequestMessage(method, uri, body, combinedOptions, out requestDetails);
     var response = TrySending(request, requestDetails, combinedOptions);
     return new SubordinateResource(response, response.RequestMessage.RequestUri, _adapterFactory, _ambientPipelineOptions);
 }
        public HttpClientAdapter CreateClient(PipelineOptions options)
        {
            var adapterOptions = new AdapterOptions
            {
                AutoRedirect = AutoRedirect.AutoRedirectButDoNotForwardAuthorizationHeader,
                CachePolicy = new CachePolicy {Cache = false},
                AcceptEncoding = new AcceptEncoding {AcceptGzipAndDeflate = true}
            };

            options.Use<AutoRedirect>(option => { adapterOptions.AutoRedirect = option; });
            options.Use<CachePolicy>(option => { adapterOptions.CachePolicy = option; });
            options.Use<AcceptEncoding>(option => { adapterOptions.AcceptEncoding = option; });

            return CreateClient(adapterOptions);
        }
        public async Task ConfiguringRetries()
        {
            // specify retry policy options
            var options = new PipelineOptions();

            options.RetryPolicy = RetryPolicy.CreateFixed(
                maxRetries: 10,
                delay: TimeSpan.FromSeconds(1),
                retriableCodes: new int[] {
                500,     // Internal Server Error
                504      // Gateway Timeout
            }
                );

            var connectionString = Environment.GetEnvironmentVariable("AZ_CONFIG_CONNECTION");

            // pass the policy options to the client
            var client = new ConfigurationClient(connectionString, options);

            await client.SetAsync(new ConfigurationSetting("some_key", "some_value"));

            await client.DeleteAsync("some_key");
        }
        public void PipelineBuilder_BuildFromConfiguration_AssemblyServices_NotAvailable()
        {
            var element = new ElementOptions()
            {
                BuilderName = "RequiredService"
            };

            // Create configuration object.
            PipelineOptions opts = new PipelineOptions();

            opts.Elements = new List <ElementOptions>
            {
                element
            };

            // Pass the configuration to the builder to create the pipeline.
            var pipeline = new PipelineBuilder(_loggerFactory, new FiftyOneServiceProvider())
                           .BuildFromConfiguration(opts);

            Assert.IsNotNull(pipeline.GetElement <RequiredServiceElement>().LoggerFactory);
            Assert.IsNull(pipeline.GetElement <RequiredServiceElement>().Service);
            Assert.IsNull(pipeline.GetElement <RequiredServiceElement>().UpdateService);
        }
Esempio n. 7
0
        public void Basics()
        {
            var options = new PipelineOptions();

            options.Transport   = new MockTransport(500, 1);
            options.RetryPolicy = new CustomRetryPolicy();

            var listener = new TestEventListener();

            listener.EnableEvents(EventLevel.LogAlways);

            var pipeline = HttpPipeline.Create(options, "test", "1.0.0");

            using (var message = pipeline.CreateMessage(options, cancellation: default))
            {
                message.SetRequestLine(PipelineMethod.Get, new Uri("https://contoso.a.io"));
                pipeline.ProcessAsync(message).Wait();

                Assert.AreEqual(1, message.Response.Status);
                var result = listener.ToString();
                Assert.AreEqual(expected, result);
            }
        }
Esempio n. 8
0
        /// <summary>
        /// The default <see cref="IPipeline"/> factory function.
        /// This looks for a 'PipelineOptions' configuration item and uses
        /// that to build the pipeline.
        /// </summary>
        /// <param name="config">
        /// The application configuration object
        /// </param>
        /// <param name="pipelineBuilder">
        /// a pipeline builder instance to use when constructing the
        /// <see cref="IPipeline"/>.
        /// </param>
        /// <returns>
        /// A new <see cref="IPipeline"/> instance
        /// </returns>
        private static IPipeline CreatePipelineFromConfig(
            IConfiguration config,
            IPipelineBuilderFromConfiguration pipelineBuilder)
        {
            // Get Pipeline options to check that it is present
            PipelineOptions options = new PipelineOptions();

            config.Bind("PipelineOptions", options);

            if (options == null ||
                options.Elements == null ||
                options.Elements.Count == 0)
            {
                throw new PipelineConfigurationException(
                          Messages.ExceptionNoConfiguration);
            }

            PipelineWebIntegrationOptions webOptions = new PipelineWebIntegrationOptions();

            config.Bind("PipelineWebIntegrationOptions", webOptions);

            // Add the sequence element.
            AddSequenceElement(options);

            if (webOptions.ClientSideEvidenceEnabled)
            {
                // Client-side evidence is enabled so make sure the
                // JsonBuilderElement and JavaScriptBundlerElement has been
                // included.
                AddJsElements(options);
            }

            // Add the SetHeaders element
            AddSetHeadersElement(options);

            return(pipelineBuilder.BuildFromConfiguration(options));
        }
Esempio n. 9
0
 public HttpClientAdapter CreateClient(PipelineOptions options)
 {
     return(new AlwaysThrowsOnSendingAdapter());
 }
Esempio n. 10
0
        private HttpResponseMessage TrySending(HttpRequestMessage request, HttpRequestMessageRequestDetails requestDetails, PipelineOptions options)
        {
            var adapter = _adapterFactory.CreateClient(options);
            HttpResponseMessage response;

            try
            {
                response = adapter.SendAsync(request).Result;
            }
            catch (AggregateException exception)
            {
                if (SendError != null)
                {
                    requestDetails = requestDetails ?? new HttpRequestMessageRequestDetails(request);
                    SendError(this, new RequestErrorEventArgs(requestDetails, exception.InnerException));
                }
                if (exception.InnerException is TaskCanceledException)
                {
                    throw new TimeoutException("The request timed out");
                }
                throw exception.InnerException;
            }

            if (Responded != null)
            {
                requestDetails = requestDetails ?? new HttpRequestMessageRequestDetails(request);
                Responded(this, new ResponseEventArgs(requestDetails, new HttpResponseMessageResponseDetails(requestDetails, response)));
            }
            ApplyPipelineToResponse(response, options);
            options.AssertAllRequestResponseOptionsWereUsed();
            return(response);
        }
Esempio n. 11
0
 public sealed override PipelineCallContext CreateContext(PipelineOptions options, CancellationToken cancellation)
 => new Context(cancellation);
 public HttpClientAdapter CreateClient(PipelineOptions options)
 {
     return new AlwaysThrowsOnSendingAdapter();
 }
Esempio n. 13
0
 public HttpClientAdapter CreateClient(PipelineOptions options)
 {
     return _adapter;
 }
 public void ApplyToResponse(HttpResponseMessage response, PipelineOptions pipelineOptions)
 {
     pipelineOptions.Use<ExpectResponseHeaders>(option => AssertResponseHeadersAreExpected(option, response.AllHeadersAsStrings()));
 }
Esempio n. 15
0
 public void ApplyToResponse(HttpResponseMessage response, PipelineOptions pipelineOptions)
 {
 }
        /// <summary>
        /// The default <see cref="IPipeline"/> factory function.
        /// This looks for a 'PipelineOptions' configuration item and uses
        /// that to build the pipeline.
        /// </summary>
        /// <param name="config">
        /// The application configuration object
        /// </param>
        /// <param name="pipelineBuilder">
        /// a pipeline builder instance to use when constructing the
        /// <see cref="IPipeline"/>.
        /// </param>
        /// <returns>
        /// A new <see cref="IPipeline"/> instance
        /// </returns>
        private static IPipeline CreatePipelineFromConfig(
            IConfiguration config,
            IPipelineBuilderFromConfiguration pipelineBuilder)
        {
            // Get Pipeline options to check that it is present
            PipelineOptions options = new PipelineOptions();

            config.Bind("PipelineOptions", options);

            if (options == null ||
                options.Elements == null ||
                options.Elements.Count == 0)
            {
                throw new PipelineConfigurationException(
                          Messages.ExceptionNoConfiguration);
            }

            PipelineWebIntegrationOptions webOptions = new PipelineWebIntegrationOptions();

            config.Bind("PipelineWebIntegrationOptions", webOptions);

            // Add the sequence element.
            var sequenceConfig = options.Elements.Where(e =>
                                                        e.BuilderName.Contains(nameof(SequenceElement),
                                                                               StringComparison.OrdinalIgnoreCase));

            if (sequenceConfig.Any() == false)
            {
                // The sequence element is not included so add it.
                // Make sure it's added as the first element.
                options.Elements.Insert(0, new ElementOptions()
                {
                    BuilderName = nameof(SequenceElement)
                });
            }

            if (webOptions.ClientSideEvidenceEnabled)
            {
                // Client-side evidence is enabled so make sure the
                // JsonBuilderElement and JavaScriptBundlerElement has been
                // included.
                var jsonConfig = options.Elements.Where(e =>
                                                        e.BuilderName.Contains(nameof(JsonBuilderElement),
                                                                               StringComparison.OrdinalIgnoreCase));
                var javascriptConfig = options.Elements.Where(e =>
                                                              e.BuilderName.Contains(nameof(JavaScriptBuilderElement),
                                                                                     StringComparison.OrdinalIgnoreCase));

                var jsIndex = javascriptConfig.Any() ?
                              options.Elements.IndexOf(javascriptConfig.First()) : -1;

                if (jsonConfig.Any() == false)
                {
                    // The json builder is not included so add it.
                    var newElementOptions = new ElementOptions()
                    {
                        BuilderName = nameof(JsonBuilderElement)
                    };
                    if (jsIndex > -1)
                    {
                        // There is already a javascript builder element
                        // so insert the json builder before it.
                        options.Elements.Insert(jsIndex, newElementOptions);
                    }
                    else
                    {
                        options.Elements.Add(newElementOptions);
                    }
                }

                if (jsIndex == -1)
                {
                    // The builder is not included so add it.
                    options.Elements.Add(new ElementOptions()
                    {
                        BuilderName     = nameof(JavaScriptBuilderElement),
                        BuildParameters = new Dictionary <string, object>()
                        {
                            { "EnableCookies", true }
                        }
                    });
                }
            }

            return(pipelineBuilder.BuildFromConfiguration(options));
        }
Esempio n. 17
0
 public HttpClientAdapter CreateClient(PipelineOptions options)
 {
     return(_adapter);
 }
Esempio n. 18
0
 public CnieltsPipeline1(PipelineOptions options) : base(options)
 {
 }
Esempio n. 19
0
 public Pipeline(IServiceProvider services, PipelineOptions options)
 {
     _services = services;
     _options  = options;
 }
Esempio n. 20
0
 public void ApplyToRequest(HttpRequestMessage request, PipelineOptions pipelineOptions)
 {
     pipelineOptions.Use <BasicAuth>(auth => AddAuthorizationHeader(request, auth.Username, auth.Password));
 }
 public void ApplyToResponse(HttpResponseMessage response, PipelineOptions pipelineOptions)
 {
     StatusAcceptability acceptable = new ExpectStatusNotInRange(400, 599);
     pipelineOptions.Use<StatusAcceptability>(option => { acceptable = option; });
     AssertResponseHasAcceptableStatus(response, acceptable);
 }
Esempio n. 22
0
 public void ApplyToResponse(HttpResponseMessage response, PipelineOptions pipelineOptions)
 {
 }
 public abstract PipelineCallContext CreateContext(PipelineOptions options, CancellationToken cancellation);
Esempio n. 24
0
 public void ApplyToRequest(HttpRequestMessage request, PipelineOptions pipelineOptions)
 {
     pipelineOptions.Use<BasicAuth>(auth => AddAuthorizationHeader(request, auth.Username, auth.Password));
 }
Esempio n. 25
0
 public void ApplyToRequest(HttpRequestMessage request, PipelineOptions pipelineOptions)
 {
     pipelineOptions.UseAll <SetRequestHeaders>(options => AddRequestHeaders(request, options));
 }
 public MockSocketMessage(ref PipelineOptions options, CancellationToken cancellation, byte[][] responses)
     : base(ref options, cancellation)
 {
     _responses = responses;
 }
 public void ApplyToRequest(HttpRequestMessage request, PipelineOptions pipelineOptions)
 {
 }
Esempio n. 28
0
 private void ApplyPipelineToResponse(HttpResponseMessage response, PipelineOptions options)
 {
     foreach (var element in _pipeline)
     {
         element.ApplyToResponse(response, options);
     }
 }
 public abstract HttpMessage CreateMessage(PipelineOptions options, CancellationToken cancellation);
Esempio n. 30
0
 public Message(ref PipelineOptions client, CancellationToken cancellation)
     : base(cancellation)
 {
 }
Esempio n. 31
0
 public ConfigurationClient(string connectionString, PipelineOptions options)
 {
     _options = options;
     Pipeline = ClientPipeline.Create(_options, SdkName, SdkVersion);
     ParseConnectionString(connectionString, out _baseUri, out _credential, out _secret);
 }
Esempio n. 32
0
 public Context(ref PipelineOptions client, CancellationToken cancellation)
     : base(cancellation)
 {
 }
Esempio n. 33
0
        private HttpRequestMessage CreateRequestMessage(HttpMethod method, string uri, BodyContent body, PipelineOptions options,
                                                        out HttpRequestMessageRequestDetails requestDetails)
        {
            var absoluteUri = AbsoluteUrlOf(uri);
            var request     = new HttpRequestMessage();

            ApplyPipelineToRequest(request, options);
            if (body != null)
            {
                var content = new StreamContent(body.AsStream());
                foreach (var header in body.Headers)
                {
                    content.Headers.Add(header.Key, header.Value);
                }

                request.Content = content;
            }
            request.RequestUri = absoluteUri;
            request.Method     = method;
            requestDetails     = null;
            if (Sending != null)
            {
                requestDetails = new HttpRequestMessageRequestDetails(request);
                Sending(this, new RequestEventArgs(requestDetails));
            }
            return(request);
        }
Esempio n. 34
0
 /// <summary>
 /// Register a <see cref="EventPipeline"/> Factory to the Server
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="options"></param>
 public void Register(Func <EventPipeline> factory, PipelineOptions options)
 {
     _server.Register(_pipelineId, factory, options);
 }
Esempio n. 35
0
 private void ApplyPipelineToRequest(HttpRequestMessage request, PipelineOptions options)
 {
     foreach (var element in _pipeline)
     {
         element.ApplyToRequest(request, options);
     }
 }
 public void ApplyToRequest(HttpRequestMessage request, PipelineOptions pipelineOptions)
 {
     pipelineOptions.UseAll<SetRequestHeaders>(options => AddRequestHeaders(request, options));
     pipelineOptions.UseAll<ComputeRequestHeaders>(options => AddRequestHeaders(request, options));
 }
Esempio n. 37
0
 private HttpRequestMessage CreateRequestMessage(HttpMethod method, string uri, BodyContent body, PipelineOptions options,
     out HttpRequestMessageRequestDetails requestDetails)
 {
     var absoluteUri = AbsoluteUrlOf(uri);
     var request = new HttpRequestMessage();
     ApplyPipelineToRequest(request, options);
     if (body != null)
     {
         var content = new StreamContent(body.AsStream());
         if (body.MediaType != null)
         {
             content.Headers.ContentType = new MediaTypeHeaderValue(body.MediaType);
         }
         request.Content = content;
     }
     request.RequestUri = absoluteUri;
     request.Method = method;
     requestDetails = null;
     if (Sending != null)
     {
         requestDetails = new HttpRequestMessageRequestDetails(request);
         Sending(this, new RequestEventArgs(requestDetails));
     }
     return request;
 }
 public void ApplyToResponse(HttpResponseMessage response, PipelineOptions pipelineOptions)
 {
     pipelineOptions.Use <ExpectResponseHeaders>(option => AssertResponseHeadersAreExpected(option, response.AllHeadersAsStrings()));
 }
Esempio n. 39
0
 public FaceClient(string baseUri, string key, PipelineOptions options)
     : this(new Uri(baseUri), key, options)
 {
 }
 public void ApplyToRequest(HttpRequestMessage request, PipelineOptions pipelineOptions)
 {
 }