public void InnerListContainers(string prefix, Action<CloudOperationResponse<IEnumerable<ICloudBlobContainer>>> callback)
        {
            var serviceOperation = string.Concat(this.storageAccountEndpoint, "?comp=list&timeout=90");

            if (!string.IsNullOrWhiteSpace(prefix))
            {
                serviceOperation = string.Concat(serviceOperation, "&prefix=", prefix.Replace(@"\", "/"));
            }

            // Adding an incremental seed to avoid a cached response.
            serviceOperation = string.Concat(serviceOperation, "&incrementalSeed=", DateTime.UtcNow.Ticks);

            var request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri(serviceOperation));
            request.Headers["x-ms-version"] = "2009-09-19";
            request.Method = "GET";

            this.Credentials.SignRequest(request, -1);
            request.BeginGetResponse(
                ar =>
                {
                    try
                    {
                            var response = (HttpWebResponse)request.EndGetResponse(ar);
                            var serializer = new StorageAccountBlobDataContractSerializer();
                            var results = serializer.ReadContainerObjects(response.GetResponseStream());
                            callback(new CloudOperationResponse<IEnumerable<ICloudBlobContainer>>((results != null) ? results : null, null));
                    }
                    catch (Exception exception)
                    {
                        callback(new CloudOperationResponse<IEnumerable<ICloudBlobContainer>>(null, StorageClientExceptionParser.ParseXmlWebException(exception as WebException) ?? exception));
                    }
                },
                null);
        }
        private void InnerListBlobsWithPrefixUsingStorageKey(string blobPrefix, bool useFlatBlobListing, Action<CloudOperationResponse<System.Collections.Generic.IEnumerable<ICloudBlob>>> callback)
        {
            var serviceOperation = string.Concat(this.Uri, "?restype=container&comp=list&timeout=90");

            if (!useFlatBlobListing)
            {
                serviceOperation = string.Concat(serviceOperation, "&delimiter=/");
            }

            if (!string.IsNullOrWhiteSpace(blobPrefix))
            {
                serviceOperation = string.Concat(serviceOperation, "&prefix=", blobPrefix.Replace(@"\", "/"));
            }

            // Adding an incremental seed to avoid a cached response.
            serviceOperation = string.Concat(serviceOperation, "&incrementalSeed=", DateTime.UtcNow.Ticks);

            var request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri(serviceOperation));
            request.Headers["x-ms-version"] = "2009-09-19";
            request.Method = "GET";

            this.Credentials.SignRequest(request, -1);
            request.BeginGetResponse(
                ar =>
                {
                    try
                    {
                        var response = (HttpWebResponse)request.EndGetResponse(ar);
                        var serializer = new StorageAccountBlobDataContractSerializer();
                        var results = serializer.ReadObject(response.GetResponseStream());

                        callback(new CloudOperationResponse<System.Collections.Generic.IEnumerable<ICloudBlob>>((results != null) ? results : new ICloudBlob[0], null));
                    }
                    catch (Exception exception)
                    {
                        callback(new CloudOperationResponse<System.Collections.Generic.IEnumerable<ICloudBlob>>(null, StorageClientExceptionParser.ParseXmlWebException(exception as WebException) ?? exception));
                    }
                },
                null);
        }