public MessageList PopMessages(string queueName, int maxMessages = 1)
        {
            if (maxMessages <= 0 || maxMessages > Queue.MaxMessagesPerPop) {
                throw new ArgumentOutOfRangeException("maxMessages");
            }

            MessageList messages = new MessageList();

            MessagingRequest request = new MessagingRequest("queues/{queueName}/messages", Method.GET);
            request.AddUrlSegment("queueName", queueName);
            request.AddParameter("batch", maxMessages, ParameterType.GetOrPost);
            request.HttpStatusSuccessCodes.Add(200);
            request.HttpStatusExceptionMap.Add(404, typeof(QueueNotFoundException));

            MessageListResponse response = client.Execute<MessageListResponse>(request);

            response.items.ForEach(delegate(MessageResponse tmpMessage)
            {
                Message message = new Message();
                message.ID = tmpMessage.id;
                message.Body = tmpMessage.body;
                message.SetInitialEntryTime(tmpMessage.initial_entry_time);
                message.VisibilityDelay = tmpMessage.visibility_delay;
                message.VisibilityInterval = tmpMessage.visibility_interval;

                if (tmpMessage.fields != null) {
                    message.Fields = new FieldList(tmpMessage.fields);
                }

                messages.Add(message);
            });

            return messages;
        }
        public Message PublishToTopic(string topicName, Message message)
        {
            MessagingRequest request = new MessagingRequest("topics/{topicName}/messages", Method.POST);
            request.AddUrlSegment("topicName", topicName);
            request.HttpStatusSuccessCodes.Add(201);
            request.HttpStatusExceptionMap.Add(404, typeof(TopicNotFoundException));

            object postObj = new {
                body = message.Body,
                fields = message.Fields,
                visibility_delay = message.VisibilityDelay
            };

            if (DebugRequests) {
                Console.WriteLine("-> " + request.JsonSerializer.Serialize(postObj));
            }

            request.AddBody(postObj);

            MessageResponse response = client.Execute<MessageResponse>(request);
            Message tmpMessage = new Message();
            tmpMessage.ID = response.id;
            tmpMessage.Body = response.body;
            tmpMessage.Fields = new FieldList(response.fields);
            tmpMessage.VisibilityDelay = response.visibility_delay;
            tmpMessage.SetInitialEntryTime(response.initial_entry_time);

            return tmpMessage;
        }