private void ValidateConnection(CdsServiceClient client)
        {
            // Validate it
            var rslt = client.Execute(new WhoAmIRequest());

            Assert.IsType <WhoAmIResponse>(rslt);

            // Clone it. - Validate use
            using (CdsServiceClient client2 = client.Clone())
            {
                rslt = client2.Execute(new WhoAmIRequest());
                Assert.IsType <WhoAmIResponse>(rslt);
            }

            // Create clone chain an break linkage.
            CdsServiceClient client3 = client.Clone();
            CdsServiceClient client4 = client3.Clone();

            rslt = client3.Execute(new WhoAmIRequest());
            Assert.IsType <WhoAmIResponse>(rslt);
            // dispose client3 explicitly
            client3.Dispose();
            rslt = client4.Execute(new WhoAmIRequest());
            Assert.IsType <WhoAmIResponse>(rslt);
            client4.Dispose();
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    _maxSize = 0;

                    while (_pool.TryDequeue(out var client))
                    {
                        client.Dispose();
                    }

                    if (_defaultClient != null)
                    {
                        _defaultClient.Dispose();
                        _defaultClient = null;
                    }
                }

                _disposed = true;
            }
        }