/// <summary>
        /// Add a handler to the end of the client's HTTP pipeline.
        /// </summary>
        /// <param name="handler">The handler to add.</param>
        public void AddHandlerToPipeline(DelegatingHandler handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            var disposableReference  = this._innerHandler;
            var disposableReference1 = this._handler;
            var disposableReference2 = new DisposableReference <HttpMessageHandler>(handler);

            if (disposableReference != null)
            {
                this._innerHandler = null;
                disposableReference.ReleaseReference();
                disposableReference = null;
            }
            handler.InnerHandler = new IndisposableDelegatingHandler(disposableReference1.Reference);
            disposableReference1.AddReference();

            this._innerHandler = disposableReference1;
            this._handler      = disposableReference2;

            var httpClient = this.HttpClient;

            this.HttpClient = new HttpClient(handler, false);

            CloneHttpClient(httpClient, this.HttpClient);
        }
Beispiel #2
0
        /// <summary>
        /// Initializes a new instance of the ServiceClient class.
        /// </summary>
        public ServiceClient()
        {
            // Create our root handler
            HttpMessageHandler handler = _transportHandlerProvider.CreateHttpTransportHandler();

            _handler = new DisposableReference <HttpMessageHandler>(handler);

            // Create the HTTP client
            HttpClient = CreateHttpClient();
        }
Beispiel #3
0
        /// <summary>
        /// Initializes HttpClient.
        /// </summary>
        /// <param name="httpMessageHandler">Http message handler to use with Http client.</param>
        protected void InitializeHttpClient(HttpMessageHandler httpMessageHandler)
        {
            _handler = new DisposableReference <HttpMessageHandler>(httpMessageHandler);

            // Create the HTTP client
            HttpClient = CreateHttpClient();

            // Add retry handler
            this.AddHandlerToPipeline(new RetryHandler());
        }
		public void Dispose_ReleaseIsCalled()
		{
			var parent = new Mock<IDisposableReference>(MockBehavior.Strict);

			var release = new Mock<IDisposable>(MockBehavior.Strict);
			release.Setup(_ => _.Dispose());

			var reference = new DisposableReference(parent.Object, release.Object);
			reference.Dispose();

			release.Verify(_ => _.Dispose(), Times.Once);
		}
		public void AddReference_CallParent()
		{
			var parent = new Mock<IDisposableReference>(MockBehavior.Strict);
			parent.Setup(_ => _.AddReference()).Returns(parent.Object);

			var release = new Mock<IDisposable>(MockBehavior.Strict);
			release.Setup(_ => _.Dispose());

			var reference = new DisposableReference(parent.Object, release.Object);
			var other = reference.AddReference();
			Assert.IsNotNull(other);

			release.Verify(_ => _.Dispose(), Times.Never);
			parent.Verify(_ => _.AddReference(), Times.Once);
		}
 /// <summary>
 /// Dispose the ServiceClient.
 /// </summary>
 public virtual void Dispose()
 {
     if (!this._disposed)
     {
         this._disposed = true;
         this.HttpClient.Dispose();
         this.HttpClient = null;
         if (this._innerHandler != null)
         {
             this._innerHandler.ReleaseReference();
             this._innerHandler = null;
         }
         this._handler.ReleaseReference();
         this._handler = null;
     }
 }
Beispiel #7
0
        /// <summary>
        /// Dispose the ServiceClient.
        /// </summary>
        public virtual void Dispose()
        {
            // Only dispose once
            if (!_disposed)
            {
                _disposed = true;

                // Dispose the client
                HttpClient.Dispose();
                HttpClient = null;

                // Release the reference to our inner handler
                if (_innerHandler != null)
                {
                    _innerHandler.ReleaseReference();
                    _innerHandler = null;
                }

                // Release the reference to our root handler
                _handler.ReleaseReference();
                _handler = null;
            }
        }
 /// <summary>
 /// Initializes HttpClient.
 /// </summary>
 /// <param name="httpMessageHandler">Http message handler to use with Http client.</param>
 protected void InitializeHttpClient(HttpMessageHandler httpMessageHandler)
 {
     this._handler   = new DisposableReference <HttpMessageHandler>(httpMessageHandler);
     this.HttpClient = this.CreateHttpClient();
     this.AddHandlerToPipeline(new RetryHandler());
 }