public override System.ServiceModel.Channels.Message Receive(TimeSpan timeout)
        {
            _session.messageFlow("myDest", MessageCreditUnit.MESSAGE, 1);
            _session.sync();
            IMessage m = _queue.Dequeue();

            System.ServiceModel.Channels.Message result = null;
            if (m != null)
            {
                var reader = new BinaryReader(m.Body, Encoding.UTF8);
                var body   = new byte[m.Body.Length - m.Body.Position];
                reader.Read(body, 0, body.Length);
                try
                {
                    result = _encoder.ReadMessage(new MemoryStream(body),
                                                  (int)_bindingElement.MaxReceivedMessageSize);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                }
                result.Headers.To = LocalAddress.Uri;

                var ack = new RangeSet();
                // ack this message
                ack.add(m.Id);
                _session.messageAccept(ack);
                _session.sync();
            }
            else
            {
                if (!_closed)
                {
                    return(Receive(timeout));
                }
            }
            return(result);
        }