internal ClientRequestContext GetRequestContext(ClientTransport transport)
        {
            Contract.Requires(transport != null);
            Contract.Ensures(Contract.Result <ClientRequestContext>() != null);

            var result = RequestContextPool.Borrow();

            result.SetTransport(transport);
            result.RenewSessionId();
            return(result);
        }
        /// <summary>
        ///		Returns the request context to the pool.
        /// </summary>
        /// <param name="context">The context to the pool.</param>
        /// <exception cref="ArgumentNullException">
        ///		<paramref name="context"/> is  <c>null</c>.
        /// </exception>
        protected internal void ReturnRequestContext(ClientRequestContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            Contract.EndContractBlock();

            context.Clear();
            context.UnboundTransport();
            RequestContextPool.Return(context);
        }