/// <summary>
        /// Process this IRequest and update the given <b>Response</b> with
        /// the result.
        /// </summary>
        /// <remarks>
        /// Implementations of this method are free to throw an exception
        /// while processing the IRequest. An exception will result in the
        /// <b>Response</b> being marked as a failure that the
        /// <b>Response</b> result will be the exception itself.
        /// </remarks>
        /// <param name="response">
        /// The <b>Response</b> that will be sent back to the requestor.
        /// </param>
        /// <exception cref="Exception">
        /// If exception occurs during execution.
        /// </exception>
        protected override void OnRun(Response response)
        {
            Connection connection = Connection;

            Debug.Assert(connection != null);

            IChannel   channel0  = Channel;
            IPrincipal principal = Principal;
            Peer       peer      = (Peer)channel0.Receiver;

            response.Result = connection.AcceptChannelInternal(
                ChannelUri, peer.EnsureSerializer(), Receiver, principal,
                IdentityToken);
        }