/// <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); }
/// <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(); }
/// <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; } }
/// <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()); }