/// <summary> /// Lists the queues within the account. /// </summary> /// <returns>A list of queues</returns> private ListQueueResult ListQueuesImpl(string prefix, string marker, int maxResult) { ListQueueResult result = null; RetryPolicy(() => { NameValueCollection col = new NameValueCollection(); col.Add(StorageHttpConstants.QueryParams.QueryParamComp, StorageHttpConstants.CompConstants.List); if (!string.IsNullOrEmpty(prefix)) { col.Add(StorageHttpConstants.QueryParams.QueryParamPrefix, prefix); } if (!string.IsNullOrEmpty(marker)) { col.Add(StorageHttpConstants.QueryParams.QueryParamMarker, marker); } col.Add(StorageHttpConstants.QueryParams.QueryParamMaxResults, maxResult.ToString(CultureInfo.InvariantCulture)); ResourceUriComponents uriComponents; Uri uri = Utilities.CreateRequestUri( AccountInfo.BaseUri, AccountInfo.UsePathStyleUris, AccountInfo.AccountName, null, null, Timeout, col, out uriComponents ); HttpWebRequest request = Utilities.CreateHttpRequest(uri, StorageHttpConstants.HttpMethod.Get, Timeout); _credentials.SignRequest(request, uriComponents); try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { using (Stream stream = response.GetResponseStream()) { result = GetQueuesFromResponse(stream); stream.Close(); } } else { Utilities.ProcessUnexpectedStatusCode(response); } response.Close(); } } catch (WebException we) { throw Utilities.TranslateWebException(we); } }); return(result); }
private static ListQueueResult GetQueuesFromResponse(Stream stream) { ListQueueResult result = null; List <string> names = new List <string>(); List <string> urls = new List <string>(); string nextMarker = null; XmlDocument doc = new XmlDocument(); try { doc.Load(stream); } catch (XmlException xe) { throw new StorageServerException(StorageErrorCode.ServiceBadResponse, "The result of a ListQueue operation could not be parsed", default(HttpStatusCode), xe); } // get queue names and urls XmlNodeList queueNameNodes = doc.SelectNodes(XPathQueryHelper.QueueListQuery); foreach (XmlNode queueNameNode in queueNameNodes) { string queueName = XPathQueryHelper.LoadSingleChildStringValue(queueNameNode, StorageHttpConstants.XmlElementNames.QueueName, true); names.Add(queueName); string url = XPathQueryHelper.LoadSingleChildStringValue(queueNameNode, StorageHttpConstants.XmlElementNames.Url, true); urls.Add(url); } // Get the nextMarker XmlNode nextMarkerNode = doc.SelectSingleNode(XPathQueryHelper.NextMarkerQuery); if (nextMarkerNode != null && nextMarkerNode.FirstChild != null) { nextMarker = nextMarkerNode.FirstChild.Value; } if (names.Count > 0) { Debug.Assert(names.Count == urls.Count); result = new ListQueueResult(names, urls, nextMarker); } return(result); }
/// <summary> /// Lists all queues with a given prefix within an account. /// </summary> /// <param name="prefix"></param> /// <returns>The list of queue names.</returns> public override IEnumerable <MessageQueue> ListQueues(string prefix) { string marker = ""; const int maxResults = StorageHttpConstants.ListingConstants.MaxQueueListResults; do { ListQueueResult result = ListQueuesImpl(prefix, marker, maxResults); if (result == null) { marker = null; } else { marker = result.NextMarker; foreach (string name in result.Names) { yield return(new QueueRest(name, AccountInfo, this.Timeout, this.RetryPolicy, this.Version)); } } } while (marker != null); }
private static ListQueueResult GetQueuesFromResponse(Stream stream) { ListQueueResult result = null; List<string> names = new List<string>(); List<string> urls = new List<string>(); string nextMarker = null; XmlDocument doc = new XmlDocument(); try { doc.Load(stream); } catch (XmlException xe) { throw new StorageServerException(StorageErrorCode.ServiceBadResponse, "The result of a ListQueue operation could not be parsed", default(HttpStatusCode), xe); } // get queue names and urls XmlNodeList queueNameNodes = doc.SelectNodes(XPathQueryHelper.QueueListQuery); foreach (XmlNode queueNameNode in queueNameNodes) { string queueName = XPathQueryHelper.LoadSingleChildStringValue(queueNameNode, StorageHttpConstants.XmlElementNames.QueueName, true); names.Add(queueName); string url = XPathQueryHelper.LoadSingleChildStringValue(queueNameNode, StorageHttpConstants.XmlElementNames.Url, true); urls.Add(url); } // Get the nextMarker XmlNode nextMarkerNode = doc.SelectSingleNode(XPathQueryHelper.NextMarkerQuery); if (nextMarkerNode != null && nextMarkerNode.FirstChild != null) { nextMarker = nextMarkerNode.FirstChild.Value; } if (names.Count > 0) { Debug.Assert(names.Count == urls.Count); result = new ListQueueResult(names, urls, nextMarker); } return result; }