public override Message Receive(TimeSpan timeout)
        {
            try
            {
#if VERBOSE
                DebugHelper.Start();
#endif
                BasicGetResult result = _messageReceiver.Receive(timeout);

                if (result == null)
                {
                    return(null);
                }

                string contentType = result.BasicProperties.ContentType;

                if (!_encoders.ContainsKey(contentType))
                {
                    _messageReceiver.DropMessage(result.DeliveryTag);

                    return(null);
                }

                MessageEncoder encoder = _encoders[contentType];

                _messageReceiver.AcceptMessage(result.DeliveryTag);

#if VERBOSE
                DebugHelper.Stop(" #### Message.Receive {{\n\tBytes={1}, \n\tTime={0}ms}}.",
                                 result.Body.Length);
#endif

#if VERBOSE
                DebugHelper.Start();
#endif
                Message message = encoder.ReadMessage(new MemoryStream(result.Body), int.MaxValue);
                message.Headers.To = LocalAddress.Uri;

#if VERBOSE
                DebugHelper.Stop(" #### Message.DeSerialize {{\n\tAction={2}, \n\tBytes={1}, \n\tTime={0}ms}}.",
                                 result.Body.Length,
                                 message.Headers.Action);
#endif
                return(message);
            }
            catch (EndOfStreamException)
            {
                Close();
                return(null);
            }
        }