From 6bd43591ac6613420e1e8fd936c19d342b114fde Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 6 Aug 2013 17:36:32 -0700 Subject: [PATCH] Implementing Windows Azure Blob Storage provider module --- .../Microsoft.WindowsAzure.Configuration.dll | Bin 0 -> 18584 bytes .../Microsoft.WindowsAzure.Storage.dll | Bin 0 -> 402096 bytes .../Microsoft.WindowsAzure.Storage.xml | 16198 ++++++++++++++++ .../Orchard.AzureBlobStorage/Module.txt | 12 + .../Orchard.AzureBlobStorage.csproj | 139 + .../Properties/AssemblyInfo.cs | 36 + .../Services/AzureBlobStorageProvider.cs | 61 + .../Services/AzureFileSystem.cs | 365 + .../Services/CloudBlobContainerExtensions.cs | 54 + .../Orchard.AzureBlobStorage/Web.config | 41 + src/Orchard.sln | 15 +- 11 files changed, 16920 insertions(+), 1 deletion(-) create mode 100644 lib/windowsazure/Microsoft.WindowsAzure.Configuration.dll create mode 100644 lib/windowsazure/Microsoft.WindowsAzure.Storage.dll create mode 100644 lib/windowsazure/Microsoft.WindowsAzure.Storage.xml create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Module.txt create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Orchard.AzureBlobStorage.csproj create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Properties/AssemblyInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureBlobStorageProvider.cs create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureFileSystem.cs create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/CloudBlobContainerExtensions.cs create mode 100644 src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Web.config diff --git a/lib/windowsazure/Microsoft.WindowsAzure.Configuration.dll b/lib/windowsazure/Microsoft.WindowsAzure.Configuration.dll new file mode 100644 index 0000000000000000000000000000000000000000..3c7f0711306de1c27da907cc73c281fd059fdf63 GIT binary patch literal 18584 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 Z@}2Ddw(vFfXx;4@Lw{J@q8;`_{~z2o>~a7A literal 0 HcmV?d00001 diff --git a/lib/windowsazure/Microsoft.WindowsAzure.Storage.dll b/lib/windowsazure/Microsoft.WindowsAzure.Storage.dll new file mode 100644 index 0000000000000000000000000000000000000000..80ff20f7402c872790401ded80ea3c1233088ce6 GIT binary patch literal 402096 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

-OOq_B8?W#Q7&!s*4im4z!SUw?5S6FH=l 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 literal 0 HcmV?d00001 diff --git a/lib/windowsazure/Microsoft.WindowsAzure.Storage.xml b/lib/windowsazure/Microsoft.WindowsAzure.Storage.xml new file mode 100644 index 000000000..f2ec72cc8 --- /dev/null +++ b/lib/windowsazure/Microsoft.WindowsAzure.Storage.xml @@ -0,0 +1,16198 @@ + + + + Microsoft.WindowsAzure.Storage + + + +

+ Represents the status of an asynchronous operation and provides support for cancellation. + + + + + Cancels the asynchronous operation. + + + + + Represents a handler that signs HTTP requests. + + + + + Signs the specified HTTP request so it can be authenticated by the Windows Azure storage services. + + The HTTP request to sign. + An object for tracking the current operation. + + + + Represents a handler that signs HTTP requests with no authentication information. + + + + + Initializes a new instance of the class. + + + + + Signs the specified HTTP request with no authentication information. + + The HTTP request to sign. + An object for tracking the current operation. + + + + Represents a handler that signs HTTP requests with a shared key. + + + + + Initializes a new instance of the class. + + A canonicalizer that converts HTTP request data into a standard form appropriate for signing. + A object providing credentials for the request. + The name of the storage account that the HTTP request will access. + + + + Signs the specified HTTP request with a shared key. + + The HTTP request to sign. + An object for tracking the current operation. + + + + Represents a handler that signs HTTP requests with a shared key. + + + + + Initializes a new instance of the class. + + A canonicalizer that converts HTTP request data into a standard form appropriate for signing. + A object providing credentials for the request. + The name of the storage account that the HTTP request will access. + + + + Signs the specified HTTP request with a shared key. + + The HTTP request to sign. + An object for tracking the current operation. + + + + Initializes a new instance of the BlobReadStreamBase class. + + Blob reference to read from + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + Sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating the reference + point used to obtain the new position. + The new position within the current stream. + + + + This operation is not supported in BlobReadStreamBase. + + Not used. + + + + This operation is not supported in BlobReadStreamBase. + + Not used. + Not used. + Not used. + + + + This operation is not supported in BlobReadStreamBase. + + + + + Locks all further read operations to the current ETag value. + Therefore, if someone else writes to the blob while we are reading, + all our operations will start failing with condition mismatch error. + + + + + Updates the blob MD5 with newly downloaded content. + + + + + + + + Gets a value indicating whether the current stream supports reading. + + + + + Gets a value indicating whether the current stream supports seeking. + + + + + Gets a value indicating whether the current stream supports writing. + + + + + Gets or sets the position within the current stream. + + + + + Initializes a new instance of the BlobReadStrea class. + + Blob reference to read from + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + Reads a sequence of bytes from the current stream and advances the + position within the stream by the number of bytes read. + + The buffer to read the data into. + The byte offset in buffer at which to begin writing + data read from the stream. + The maximum number of bytes to read. + The total number of bytes read into the buffer. This can be + less than the number of bytes requested if that many bytes are not + currently available, or zero (0) if the end of the stream has been reached. + + + + Begins an asynchronous read operation. + + The buffer to read the data into. + The byte offset in buffer at which to begin writing + data read from the stream. + The maximum number of bytes to read. + An optional asynchronous callback, to be called when the read is complete. + A user-provided object that distinguishes this particular asynchronous read request from other requests. + An IAsyncResult that represents the asynchronous read, which could still be pending. + + + + Waits for the pending asynchronous read to complete. + + The reference to the pending asynchronous request to finish. + The total number of bytes read into the buffer. This can be + less than the number of bytes requested if that many bytes are not + currently available, or zero (0) if the end of the stream has been reached. + + + + Dispatches a read operation that either reads from the cache or makes a call to + the server. + + The reference to the pending asynchronous request to finish. + The buffer to read the data into. + The byte offset in buffer at which to begin writing + data read from the stream. + The maximum number of bytes to read. + Even though this code looks like it can run in parallel, the semaphore only allows + 1 active read. This is required because of caching. + + + + Gets the length in bytes of the stream. + + + + + Initializes a new instance of the BlobWriteStreamBase class. + + The service client. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + Initializes a new instance of the BlobWriteStreamBase class for a block blob. + + Blob reference to write to. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + Initializes a new instance of the BlobWriteStreamBase class for a page blob. + + Blob reference to write to. + Size of the page blob. + Use true if the page blob is newly created, false otherwise. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + This operation is not supported in BlobWriteStreamBase. + + Not used. + Not used. + Not used. + + + + Sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating the reference + point used to obtain the new position. + The new position within the current stream. + + + + This operation is not supported in BlobWriteStreamBase. + + Not used. + + + + Generates a new block ID to be used for PutBlock. + + Base64 encoded block ID + + + + Gets a value indicating whether the current stream supports reading. + + + + + Gets a value indicating whether the current stream supports seeking. + + + + + Gets a value indicating whether the current stream supports writing. + + + + + Gets the length in bytes of the stream. + + + + + Gets or sets the position within the current stream. + + + + + Initializes a new instance of the BlobWriteStream class for a block blob. + + Blob reference to write to. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + Initializes a new instance of the BlobWriteStream class for a page blob. + + Blob reference to write to. + Size of the page blob. + Use true if the page blob is newly created, false otherwise. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object for tracking the current operation. + + + + Sets the position within the current stream. + + A byte offset relative to the origin parameter. + A value of type SeekOrigin indicating the reference + point used to obtain the new position. + The new position within the current stream. + + + + Writes a sequence of bytes to the current stream and advances the current + position within this stream by the number of bytes written. + + An array of bytes. This method copies count bytes from + buffer to the current stream. + The zero-based byte offset in buffer at which to begin + copying bytes to the current stream. + The number of bytes to be written to the current stream. + + + + Begins an asynchronous write operation. + + An array of bytes. This method copies count bytes from + buffer to the current stream. + The zero-based byte offset in buffer at which to begin + copying bytes to the current stream. + The number of bytes to be written to the current stream. + An optional asynchronous callback, to be called when the write is complete. + A user-provided object that distinguishes this particular asynchronous write request from other requests. + An IAsyncResult that represents the asynchronous write, which could still be pending. + + + + Waits for the pending asynchronous write to complete. + + The reference to the pending asynchronous request to finish. + + + + Clears all buffers for this stream and causes any buffered data to be written to the underlying blob. + + + + + Releases the blob resources used by the Stream. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Commits the blob. For block blobs, this means uploading the block list. For + page blobs, however, it only uploads blob properties. + + + + + Dispatches a write operation. + + The reference to the pending asynchronous request to finish. + + + + Starts an asynchronous PutBlock operation as soon as the parallel + operation semaphore becomes available. + + Data to be uploaded + Block ID + MD5 hash of the data to be uploaded + The reference to the pending asynchronous request to finish. + + + + Starts an asynchronous WritePages operation as soon as the parallel + operation semaphore becomes available. + + Data to be uploaded + Offset within the page blob + MD5 hash of the data to be uploaded + The reference to the pending asynchronous request to finish. + + + + Provides a client-side logical representation of the Windows Azure Blob Service. This client is used to configure and execute requests against the Blob Service. + + The service client encapsulates the base URI for the Blob service. If the service client will be used for authenticated access, it also encapsulates the credentials for accessing the storage account. + + Provides a client-side logical representation of the Windows Azure Blob Service. This client is used to configure and execute requests against the Blob Service. + + The service client encapsulates the base URI for the Blob service. If the service client will be used for authenticated access, it also encapsulates the credentials for accessing the storage account. + + + + Constant for the max value of ParallelOperationThreadCount. + + + + + Returns an enumerable collection of containers. + + An enumerable collection of containers. + + + + Returns an enumerable collection of containers whose names + begin with the specified prefix and that are retrieved lazily. + + The container name prefix. + A value that indicates whether to return container metadata with the listing. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + An enumerable collection of containers that are retrieved lazily. + + + + Returns a result segment containing a collection of objects. + + A returned by a previous listing operation. + A result segment of containers. + + + + Returns a result segment containing a collection of containers whose names begin with the specified prefix. + + The container name prefix. + A value that indicates whether to return container metadata with the listing. + A non-negative integer value that indicates the maximum number of results to be returned + in the result segment, up to the per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + A result segment of containers. + + + + Returns a result segment containing a collection of containers + whose names begin with the specified prefix. + + The container name prefix. + A value that indicates whether to return container metadata with the listing. + A non-negative integer value that indicates the maximum number of results to be returned + in the result segment, up to the per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + A result segment of containers. + + + + Begins an asynchronous request to return a result segment containing a collection of containers. + + A continuation token returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to return a result segment containing a collection of containers + whose names begin with the specified prefix. + + The container name prefix. + A value that indicates whether to return container metadata with the listing. + A non-negative integer value that indicates the maximum number of results to be returned + in the result segment, up to the per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a result segment containing a collection of containers. + + An that references the pending asynchronous operation. + A result segment of containers. + + + + Returns an enumerable collection of the blobs in the container that are retrieved lazily. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + An enumerable collection of objects that implement and are retrieved lazily. + + + + Returns a result segment containing a collection of blob items + in the container. + + The blob name prefix. + A returned by a previous listing operation. + A result segment containing objects that implement . + + + + Returns a result segment containing a collection of blob items + in the container. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A result segment containing objects that implement . + + + + Begins an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + The blob name prefix. + A returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + An that references the pending asynchronous operation. + A result segment containing objects that implement . + + + + Gets a reference to a blob in this container. + + The URI of the blob. + An object that represents the access conditions for the container. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A reference to the blob. + + + + Begins an asynchronous operation to get a reference to a blob in this container. + + The URI of the blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get a reference to a blob in this container. + + The URI of the blob. + An object that represents the access conditions for the container. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get a reference to a blob in this container. + + An that references the pending asynchronous operation. + A reference to the blob. + + + + Core implementation for the ListContainers method. + + The container prefix. + The details included. + The continuation token. + A non-negative integer value that indicates the maximum number of results to be returned + in the result segment, up to the per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A object that specifies any additional options for the request. + A that lists the containers. + + + + Implements the FetchAttributes method. The attributes are updated immediately. + + The URI of the blob. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that fetches the attributes. + + + + Begins an asynchronous operation to get the properties of the blob service. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get the properties of the blob service. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get the properties of the blob service. + + The result returned from a prior call to + BeginGetServiceProperties + . + The blob service properties. + + + + Gets the properties of the blob service. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + The blob service properties. + + + + Begins an asynchronous operation to set the properties of the blob service. + + The blob service properties. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to set the properties of the blob service. + + The blob service properties. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to set the properties of the blob service. + + The result returned from a prior call to + BeginSetServiceProperties . + + + + Sets the properties of the blob service. + + The blob service properties. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object that represents the context for the current operation. + + + + Stores the default delimiter. + + + + + Stores the parallelism factor. + + + + + Default is 32 MB. + + + + + The default server and client timeout interval. + + + + + Max execution time accross all potential retries. + + + + + Initializes a new instance of the class using the specified Blob service endpoint + and anonymous credentials. + + The Blob service endpoint to use to create the client. + + + + Initializes a new instance of the class using the specified Blob service endpoint + and account credentials. + + The Blob service endpoint to use to create the client. + The account credentials. + + + + Initializes a new instance of the class. + + True to use path style Uris. + The Blob service endpoint to use to create the client. + The account credentials. + + + + Returns a reference to a object. + + A reference to the root container. + + + + Returns a reference to a object with the specified name. + + The name of the container, or an absolute URI to the container. + A reference to a container. + + + + Parses the user prefix. + + The prefix. + Name of the container. + The listing prefix. + + + + Gets or sets the authentication scheme to use to sign HTTP requests. + + + + + Gets the authentication handler used to sign HTTP requests. + + The authentication handler. + + + + Gets the account credentials used to create the Blob service client. + + The account credentials. + + + + Gets the base URI for the Blob service client. + + The base URI used to construct the Blob service client. + + + + Gets or sets the default retry policy for requests made via the Blob service client. + + The retry policy. + + + + Gets or sets the default server and client timeout for requests. + + The server and client timeout interval. + + + + Gets or sets the maximum execution time accross all potential retries. + + The maximum execution time accross all potential retries. + + + + Gets or sets the default delimiter that may be used to create a virtual directory structure of blobs. + + The default delimiter. + + + + Gets or sets the maximum size of a blob in bytes that may be uploaded as a single blob. + + The maximum size of a blob, in bytes, that may be uploaded as a single blob, + ranging from between 1 and 64 MB inclusive. + + + + Gets or sets the number of blocks that may be simultaneously uploaded when uploading a blob that is greater than + the value specified by the property in size. + + The number of parallel operations that may proceed. + + + + Gets a value indicating whether the service client is used with Path style or Host style. + + Is true if use path style uris; otherwise, false. + + + + Represents a container in the Windows Azure Blob service. + + Containers hold directories, which are encapsulated as objects, and directories hold block blobs and page blobs. Directories can also contain sub-directories. + + Represents a container in the Windows Azure Blob service. + + + + + Creates the container. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object + is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to create a container. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a container. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to create a container. + + An that references the pending asynchronous operation. + + + + Creates the container if it does not already exist. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the container did not already exist and was created; otherwise false. + + + + Begins an asynchronous request to create the container if it does not already exist. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to create the container if it does not already exist. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to create the container if it does not already exist. + + An that references the pending asynchronous operation. + true if the container did not already exist and was created; otherwise, false. + + + + Deletes the container. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to delete a container. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete a container. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete a container. + + An that references the pending asynchronous operation. + + + + Deletes the container if it already exists. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the container did not already exist and was created; otherwise false. + + + + Begins an asynchronous request to delete the container if it already exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to delete the container if it already exists. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to delete the container if it already exists. + + An that references the pending asynchronous operation. + true if the container did not already exist and was created; otherwise, false. + + + + Gets a reference to a blob in this container. + + The name of the blob. + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + A reference to the blob. + + + + Begins an asynchronous operation to get a reference to a blob in this container. + + The name of the blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get a reference to a blob in this container. + + The name of the blob. + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get a reference to a blob in this container. + + An that references the pending asynchronous operation. + A reference to the blob. + + + + Returns an enumerable collection of the blobs in the container that are retrieved lazily. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + An enumerable collection of objects that implement and are retrieved lazily. + + + + Returns a result segment containing a collection of blob items + in the container. + + A continuation token returned by a previous listing operation. + A result segment containing objects that implement . + + + + Returns a result segment containing a collection of blob items + in the container. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + A result segment containing objects that implement . + + + + Returns a result segment containing a collection of blob items + in the container. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + A result segment containing objects that implement . + + + + Begins an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + A continuation token returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + The blob name prefix. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + An that references the pending asynchronous operation. + A result segment containing objects that implement . + + + + Sets permissions for the container. + + The permissions to apply to the container. + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous request to set permissions for the container. + + The permissions to apply to the container. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to set permissions for the container. + + The permissions to apply to the container. + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to set permissions for the container. + + An that references the pending asynchronous operation. + + + + Gets the permissions settings for the container. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The container's permissions. + + + + Begins an asynchronous request to get the permissions settings for the container. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to get the permissions settings for the container. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to get the permissions settings for the container. + + An that references the pending asynchronous operation. + The container's permissions. + + + + Checks existence of the container. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the container exists. + + + + Begins an asynchronous request to check existence of the container. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to check existence of the container. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to check existence of the container. + + An that references the pending asynchronous operation. + true if the container exists. + + + + Retrieves the container's attributes. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to retrieve the container's attributes. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to retrieve the container's attributes. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to retrieve the container's attributes. + + An that references the pending asynchronous operation. + + + + Sets the container's user-defined metadata. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to set user-defined metadata on the container. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to set user-defined metadata on the container. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous request operation to set user-defined metadata on the container. + + An that references the pending asynchronous operation. + + + + Acquires a lease on this container. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + The ID of the acquired lease. + + + + Begins an asynchronous operation to acquire a lease on this container. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to acquire a lease on this container. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to acquire a lease on this container. + + An IAsyncResult that references the pending asynchronous operation. + The ID of the acquired lease. + + + + Renews a lease on this container. + + An object that represents the access conditions for the container, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to renew a lease on this container. + + An object that represents the access conditions for the container, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to renew a lease on this container. + + An object that represents the access conditions for the container, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to renew a lease on this container. + + An IAsyncResult that references the pending asynchronous operation. + + + + Changes the lease ID on this container. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the container, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + The new lease ID. + + + + Begins an asynchronous operation to change the lease on this container. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the container, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to change the lease on this container. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the container, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to change the lease on this container. + + An IAsyncResult that references the pending asynchronous operation. + The new lease ID. + + + + Releases the lease on this container. + + An object that represents the access conditions for the container, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to release the lease on this container. + + An object that represents the access conditions for the container, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to release the lease on this container. + + An object that represents the access conditions for the container, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to release the lease on this container. + + An IAsyncResult that references the pending asynchronous operation. + + + + Breaks the current lease on this container. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + A representing the amount of time before the lease ends, to the second. + + + + Begins an asynchronous operation to break the current lease on this container. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to break the current lease on this container. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to break the current lease on this container. + + An IAsyncResult that references the pending asynchronous operation. + A representing the amount of time before the lease ends, to the second. + + + + Generates a RESTCommand for acquiring a lease. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation. This parameter must not be null. + A RESTCommand implementing the acquire lease operation. + + + + Generates a RESTCommand for renewing a lease. + + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation, including the current lease ID. + This cannot be null. + A RESTCommand implementing the renew lease operation. + + + + Generates a RESTCommand for changing a lease ID. + + The proposed new lease ID. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation, including the current lease ID. This cannot be null. + A RESTCommand implementing the change lease ID operation. + + + + Generates a RESTCommand for releasing a lease. + + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation, including the current lease ID. + This cannot be null. + A RESTCommand implementing the release lease operation. + + + + Generates a RESTCommand for breaking a lease. + + The amount of time to allow the lease to remain, rounded down to seconds. + If null, the break period is the remainder of the current lease, or zero for infinite leases. + An object that represents the access conditions for the container. If null, no condition is used. + The options for this operation. Cannot be null. + A RESTCommand implementing the break lease operation. + + + + Implementation for the Create method. + + An object that specifies any additional options for the request. + A that creates the container. + + + + Implementation for the Delete method. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + A that deletes the container. + + + + Implementation for the FetchAttributes method. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + A that fetches the attributes. + + + + Implementation for the Exists method. + + An object that specifies any additional options for the request. + A that checks existence. + + + + Implementation for the SetMetadata method. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + A that sets the metadata. + + + + Implementation for the SetPermissions method. + + The permissions to set. + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + A that sets the permissions. + + + + Implementation for the GetPermissions method. + + An object that represents the access conditions for the container. If null, no condition is used. + An object that specifies any additional options for the request. + A that gets the permissions. + + + + Selects the protocol response. + + The protocol item. + The parsed . + + + + Core implementation of the ListBlobs method. + + The blob prefix. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + An object that specifies any additional options for the request. + A continuation token returned by a previous listing operation. + A that lists the blobs. + + + + Retreive ETag and LastModified date time from response. + + The response to parse. + + + + Initializes a new instance of the class. + + The absolute URI to the container. + + + + Initializes a new instance of the class. + + The absolute URI to the container. + The account credentials. + + + + Initializes a new instance of the class. + + The container name. + A client object that specifies the endpoint for the Blob service. + + + + Initializes a new instance of the class. + + The properties. + The metadata. + The container name. + The client to be used. + + + + Parse URI for SAS (Shared Access Signature) information. + + The complete Uri. + The credentials to use. + + + + Returns the canonical name for shared access. + + The canonical name. + + + + Returns a shared access signature for the container. + + The access policy for the shared access signature. + A shared access signature. + + + + Returns a shared access signature for the container. + + The access policy for the shared access signature. + A container-level access policy. + A shared access signature. + + + + Gets a reference to a page blob in this container. + + The name of the blob. + A reference to a page blob. + + + + Returns a reference to a page blob in this virtual directory. + + The name of the page blob. + The snapshot timestamp, if the blob is a snapshot. + A reference to a page blob. + + + + Gets a reference to a block blob in this container. + + The name of the blob. + A reference to a block blob. + + + + Gets a reference to a block blob in this container. + + The name of the blob. + The snapshot timestamp, if the blob is a snapshot. + A reference to a block blob. + + + + Gets a reference to a virtual blob directory beneath this container. + + The name of the virtual blob directory. + A reference to a virtual blob directory. + + + + Gets the service client for the container. + + A client object that specifies the endpoint for the Blob service. + + + + Gets the container's URI. + + The absolute URI to the container. + + + + Gets the name of the container. + + The container's name. + + + + Gets the container's metadata. + + The container's metadata. + + + + Gets the container's system properties. + + The container's properties. + + + + Represents a virtual directory of blobs, designated by a delimiter character. + + Containers, which are encapsulated as objects, hold directories, and directories hold block blobs and page blobs. Directories can also contain sub-directories. + + Represents a virtual directory of blobs on the client which emulates a hierarchical data store by using delimiter characters. + + Containers, which are encapsulated as objects, hold directories, and directories hold block blobs and page blobs. Directories can also contain sub-directories. + + + + Represents an item that may be returned by a blob listing operation. + + + + + Gets the URI to the blob item. + + The blob item's URI. + + + + Gets the blob item's parent. + + The blob item's parent. + + + + Gets the blob item's container. + + The blob item's container. + + + + Returns an enumerable collection of the blobs in the container that are retrieved lazily. + + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + An enumerable collection of objects that implement and are retrieved lazily. + + + + Returns a result segment containing a collection of blob items + in the container. + + A continuation token returned by a previous listing operation. + A result segment containing objects that implement . + + + + Returns a result segment containing a collection of blob items + in the container. + + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + A result segment containing objects that implement . + + + + Begins an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + A continuation token returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + Whether to list blobs in a flat listing, or whether to list blobs hierarchically, by virtual directory. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A continuation token returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a result segment containing a collection of blob items + in the container. + + An that references the pending asynchronous operation. + A result segment containing objects that implement . + + + + Stores the parent directory. + + + + + Stores the parent container. + + + + + Stores the prefix this directory represents. + + + + + Initializes a new instance of the class given an address and a client. + + The blob directory's address. + The client to use. + + + + Gets a reference to a page blob in this virtual directory. + + The name of the blob. + A reference to a page blob. + + + + Returns a reference to a page blob in this virtual directory. + + The name of the page blob. + The snapshot timestamp, if the blob is a snapshot. + A reference to a page blob. + + + + Gets a reference to a block blob in this virtual directory. + + The name of the blob. + A reference to a block blob. + + + + Gets a reference to a block blob in this virtual directory. + + The name of the blob. + The snapshot timestamp, if the blob is a snapshot. + A reference to a block blob. + + + + Returns a virtual subdirectory within this virtual directory. + + The name of the virtual subdirectory. + A object representing the virtual subdirectory. + + + + Initializes the prefix. + + + + + Gets the service client for the virtual directory. + + A client object that specifies the endpoint for the Windows Azure Blob service. + + + + Gets the URI that identifies the virtual directory. + + The URI to the virtual directory. + + + + Gets the container for the virtual directory. + + The container for the virtual directory. + + + + Gets the parent directory for the virtual directory. + + The virtual directory's parent directory. + + + + Gets the prefix. + + The prefix. + + + + Implements getting the stream without specifying a range. + + The blob. + The attributes. + The destination stream. + The offset. + The length. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A that gets the stream. + + + + + Implements the FetchAttributes method. The attributes are updated immediately. + + The blob. + The attributes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A that fetches the attributes. + + + + + Implementation for the Exists method. + + The blob. + The attributes. + An object that specifies any additional options for the request. + + A that checks existence. + + + + + Implementation for the SetMetadata method. + + The blob. + The attributes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A that sets the metadata. + + + + + Implementation for the SetProperties method. + + The blob. + The attributes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A that sets the properties. + + + + + Implements the DeleteBlob method. + + The blob. + The attributes. + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A that deletes the blob. + + + + + Generates a for acquiring a lease. + + The blob. + The attributes. + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A implementing the acquire lease operation. + + + + + Generates a for renewing a lease. + + The blob. + The attributes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A implementing the renew lease operation. + + accessCondition + + + + Generates a for changing a lease ID. + + The blob. + The attributes. + The proposed new lease ID. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A implementing the change lease ID operation. + + accessCondition + + + + Generates a for releasing a lease. + + The blob. + The attributes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A implementing the release lease operation. + + accessCondition + + + + Generates a for breaking a lease. + + The blob. + The attributes. + The amount of time to allow the lease to remain, rounded down to seconds. + If null, the break period is the remainder of the current lease, or zero for infinite leases. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A implementing the break lease operation. + + + + + Implementation of the StartCopyFromBlob method. Result is a BlobAttributes object derived from the response headers. + + The blob. + The attributes. + The URI of the source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + An object that specifies any additional options for the request. + + A that starts to copy the blob. + + sourceAccessCondition + + + + Implementation of the AbortCopy method. No result is produced. + + The blob. + The attributes. + The copy ID of the copy operation to abort. + An object that represents the access conditions for the operation. If null, no condition is used. + An object that specifies any additional options for the request. + + A that aborts the copy. + + + + + Updates this blob with the given attributes a the end of a fetch attributes operation. + + The new attributes. + The response. + if set to true, blob's MD5 will not be updated. + + + + + Retreive ETag and LastModified date time from response. + + The attributes. + The response to parse. + + + + Converts the source blob of a copy operation to an appropriate access URI, taking Shared Access Signature credentials into account. + + The source blob. + A URI addressing the source blob, using SAS if appropriate. + + + + Represents a blob that is uploaded as a set of blocks. + + + Represents a blob that is uploaded as a set of blocks. + + + + + An interface required for Windows Azure blob types. The and classes implement the interface. + + + An interface required for Windows Azure blob types. The and classes implement the interface. + + + + + Opens a stream for reading from the blob. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A stream to be used for reading from the blob. + On the object returned by this method, the method must be called exactly once for every call. Failing to end a read process before beginning another read can cause unknown behavior. + + + + Uploads a stream to the Windows Azure Blob Service. + + The stream providing the blob content. Use a seek-able stream for optimal performance. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to upload a stream to a blob. + + The stream providing the blob content. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to upload a stream to a blob. + + The stream providing the blob content. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to upload a stream to a blob. + + An that references the pending asynchronous operation. + + + + Downloads the contents of a blob to a stream. + + The target stream. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to download the contents of a blob to a stream. + + An that references the pending asynchronous operation. + + + + Downloads the contents of a blob to a stream. + + The target stream. + The starting offset of the data range, in bytes. + The length of the data range, in bytes. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The starting offset of the data range, in bytes. + The length of the data range, in bytes. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The starting offset of the data range, in bytes. + The length of the data range, in bytes. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to download the contents of a blob to a stream. + + An that references the pending asynchronous operation. + + + + Checks existence of the blob. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the blob exists. + + + + Begins an asynchronous request to check existence of the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to check existence of the blob. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to check existence of the blob. + + An that references the pending asynchronous operation. + true if the blob exists. + + + + Populates a blob's properties and metadata. + + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to populate the blob's properties and metadata. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to populate the blob's properties and metadata. + + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to populate the blob's properties and metadata. + + An that references the pending asynchronous operation. + + + + Updates the blob's metadata. + + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the blob's metadata. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the blob's metadata. + + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to update the blob's metadata. + + An that references the pending asynchronous operation. + + + + Updates the blob's properties. + + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the blob's properties. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the blob's properties. + + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to update the blob's properties. + + An that references the pending asynchronous operation. + + + + Deletes the blob. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to delete the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete the blob. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete the blob. + + An that references the pending asynchronous operation. + + + + Deletes the blob if it already exists. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the container. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the blob did not already exist and was created; otherwise false. + + + + Begins an asynchronous request to delete the blob if it already exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to delete the blob if it already exists. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the container. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to delete the blob if it already exists. + + An that references the pending asynchronous operation. + true if the blob did not already exist and was created; otherwise, false. + + + + Acquires a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. + A string representing the proposed lease ID for the new lease. + An object that represents the access conditions for the blob. + The options for this operation. + An object that represents the context for the current operation. + The ID of the acquired lease. + + + + Begins an asynchronous operation to acquire a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. + A string representing the proposed lease ID for the new lease. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to acquire a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. + A string representing the proposed lease ID for the new lease. + An object that represents the access conditions for the blob. + The options for this operation. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to acquire a lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + The ID of the acquired lease. + + + + Renews a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to renew a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to renew a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to renew a lease on this blob. + + An that references the pending asynchronous operation. + + + + Changes the lease ID on this blob. + + A string representing the proposed lease ID for the new lease. + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. + An object that represents the context for the current operation. + The new lease ID. + + + + Begins an asynchronous operation to change the lease on this blob. + + A string representing the proposed lease ID for the new lease. + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to change the lease on this blob. + + A string representing the proposed lease ID for the new lease. + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to change the lease on this blob. + + An that references the pending asynchronous operation. + The new lease ID. + + + + Releases the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to release the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to release the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to release the lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + + + + Breaks the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. + An object that represents the access conditions for the blob. + The options for this operation. + An object that represents the context for the current operation. + A representing the amount of time before the lease ends, to the second. + + + + Begins an asynchronous operation to break the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to break the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. + An object that represents the access conditions for the blob. + The options for this operation. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to break the current lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + A representing the amount of time before the lease ends, to the second. + + + + Requests that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + An object that represents the access conditions for the source blob. + An object that represents the access conditions for the destination blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The copy ID associated with the copy operation. + + + + Begins an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy another blob's contents, properties, and metadata + to the blob referenced by this object. + + The URI of a source blob. + An object that represents the access conditions for the source blob. + An object that represents the access conditions for the destination blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + An that references the pending asynchronous operation. + The copy ID associated with the copy operation. + + + + Aborts an ongoing blob copy operation. + + A string identifying the copy operation. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to abort an ongoing blob copy operation. + + A string identifying the copy operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to abort an ongoing blob copy operation. + + A string identifying the copy operation. + An object that represents the access conditions for the blob. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to abort an ongoing blob copy operation. + + An that references the pending asynchronous operation. + + + + Returns a shared access signature for the blob. + + The access policy for the shared access signature. + A shared access signature. + + + + Returns a shared access signature for the blob. + + The access policy for the shared access signature. + A container-level access policy. + A shared access signature. + + + + Gets the blob item's name. + + The blob item's name. + + + + Gets the object that represents the Blob service. + + A client object that specifies the Blob service endpoint. + + + + Gets or sets the number of bytes to buffer when writing to a page blob stream or + the block size for writing to a block blob. + + The number of bytes to buffer or the size of a block, in bytes. + + + + Gets or sets the minimum number of bytes to buffer when reading from a blob stream. + + The minimum number of bytes to buffer. + + + + Gets the blob's system properties. + + The blob's properties. + + + + Gets the user-defined metadata for the blob. + + The blob's metadata, as a collection of name-value pairs. + + + + Gets the date and time that the blob snapshot was taken, if this blob is a snapshot. + + The blob's snapshot time if the blob is a snapshot; otherwise, null. + + If the blob is not a snapshot, the value of this property is null. + + + + + Gets the state of the most recent or pending copy operation. + + A object containing the copy state, or null if no copy blob state exists for this blob. + + + + Gets the type of the blob. + + The type of the blob. + + + + Opens a stream for reading from the blob. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A stream to be used for reading from the blob. + On the object returned by this method, the method must be called exactly once for every call. Failing to end a read process before beginning another read can cause unknown behavior. + + + + Opens a stream for writing to the blob. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A stream to be used for writing to the blob. + + + + Begins an asynchronous operation to open a stream for writing to the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to open a stream for writing to the blob. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to open a stream for writing to the blob. + + An that references the pending asynchronous operation. + A stream to be used for writing to the blob. + + + + Uploads a stream to a block blob. + + The stream providing the blob content. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to upload a stream to a block blob. + + The stream providing the blob content. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to upload a stream to a block blob. + + The stream providing the blob content. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to upload a stream to a block blob. + + An that references the pending asynchronous operation. + + + + Downloads the contents of a blob to a stream. + + The target stream. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to download the contents of a blob to a stream. + + An that references the pending asynchronous operation. + + + + Downloads the contents of a blob to a stream. + + The target stream. + The offset at which to begin downloading the blob, in bytes. + The length of the data to download from the blob, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The offset at which to begin downloading the blob, in bytes. + The length of the data to download from the blob, in bytes. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The offset at which to begin downloading the blob, in bytes. + The length of the data to download from the blob, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to download the contents of a blob to a stream. + + An that references the pending asynchronous operation. + + + + Checks existence of the blob. + + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the blob exists. + + + + Begins an asynchronous request to check existence of the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to check existence of the blob. + + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to check existence of the blob. + + An that references the pending asynchronous operation. + true if the blob exists. + + + + Populates a blob's properties and metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to populate the blob's properties and metadata. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to populate the blob's properties and metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to populate the blob's properties and metadata. + + An that references the pending asynchronous operation. + + + + Updates the blob's metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the blob's metadata. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the blob's metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to update the blob's metadata. + + An that references the pending asynchronous operation. + + + + Updates the blob's properties. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the blob's properties. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the blob's properties. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to update the blob's properties. + + An that references the pending asynchronous operation. + + + + Deletes the blob. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to delete the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete the blob. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete the blob. + + An that references the pending asynchronous operation. + + + + Deletes the blob if it already exists. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the container. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the blob did already exist and was deleted; otherwise false. + + + + Begins an asynchronous request to delete the blob if it already exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to delete the blob if it already exists. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the container. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to delete the blob if it already exists. + + An that references the pending asynchronous operation. + true if the blob did already exist and was deleted; otherwise, false. + + + + Creates a snapshot of the blob. + + A collection of name-value pairs defining the metadata of the snapshot. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request, or null. + An object that represents the context for the current operation. + A blob snapshot. + + + + Begins an asynchronous operation to create a snapshot of the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a snapshot of the blob. + + A collection of name-value pairs defining the metadata of the snapshot. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request, or null. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to create a snapshot of the blob. + + An that references the pending asynchronous operation. + A blob snapshot. + + + + Acquires a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + The ID of the acquired lease. + + + + Begins an asynchronous operation to acquire a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to acquire a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to acquire a lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + The ID of the acquired lease. + + + + Renews a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to renew a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to renew a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to renew a lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + + + + Changes the lease ID on this blob. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + The new lease ID. + + + + Begins an asynchronous operation to change the lease on this blob. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to change the lease on this blob. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to change the lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + The new lease ID. + + + + Releases the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to release the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to release the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to release the lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + + + + Breaks the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + A representing the amount of time before the lease ends, to the second. + + + + Begins an asynchronous operation to break the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to break the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to break the current lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + A representing the amount of time before the lease ends, to the second. + + + + Uploads a single block. + + A base64-encoded block ID that identifies the block. + A stream that provides the data for the block. + An optional hash value that will be used to set the property + on the blob. May be null or an empty string. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to upload a single block. + + A base64-encoded block ID that identifies the block. + A stream that provides the data for the block. + An optional hash value that will be used to set the property + on the blob. May be null or an empty string. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to upload a single block. + + A base64-encoded block ID that identifies the block. + A stream that provides the data for the block. + An optional hash value that will be used to set the property + on the blob. May be null or an empty string. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to upload a single block. + + An that references the pending asynchronous operation. + + + + Uploads a list of blocks to a new or existing blob. + + An enumerable collection of block IDs, as base64-encoded strings. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to upload a list of blocks to a new or existing blob. + + An enumerable collection of block IDs, as base64-encoded strings. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to upload a list of blocks to a new or existing blob. + + An enumerable collection of block IDs, as base64-encoded strings. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to upload a list of blocks to a new or existing blob. + + An that references the pending asynchronous operation. + + + + Returns an enumerable collection of the blob's blocks, using the specified block list filter. + + One of the enumeration values that indicates whether to return + committed blocks, uncommitted blocks, or both. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + An enumerable collection of objects implementing . + + + + Begins an asynchronous operation to return an enumerable collection of the blob's blocks, + using the specified block list filter. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return an enumerable collection of the blob's blocks, + using the specified block list filter. + + One of the enumeration values that indicates whether to return + committed blocks, uncommitted blocks, or both. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return an enumerable collection of the blob's blocks, + using the specified block list filter. + + An that references the pending asynchronous operation. + An enumerable collection of objects implementing . + + + + Requests that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The copy ID associated with the copy operation. + + This method fetches the blob's ETag, last modified time, and part of the copy state. + The copy ID and copy status fields are fetched, and the rest of the copy state is cleared. + + + + + Requests that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The copy ID associated with the copy operation. + + This method fetches the blob's ETag, last modified time, and part of the copy state. + The copy ID and copy status fields are fetched, and the rest of the copy state is cleared. + + + + + Begins an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy another blob's contents, properties, and metadata + to the blob referenced by this object. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy another blob's contents, properties, and metadata + to the blob referenced by this object. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + An that references the pending asynchronous operation. + The copy ID associated with the copy operation. + + This method fetches the blob's ETag, last modified time, and part of the copy state. + The copy ID and copy status fields are fetched, and the rest of the copy state is cleared. + + + + + Aborts an ongoing blob copy operation. + + A string identifying the copy operation. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to abort an ongoing blob copy operation. + + A string identifying the copy operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to abort an ongoing blob copy operation. + + A string identifying the copy operation. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to abort an ongoing blob copy operation. + + An that references the pending asynchronous operation. + + + + Implementation for the CreateSnapshot method. + + A collection of name-value pairs defining the metadata of the snapshot, or null. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that creates the snapshot. + If the metadata parameter is null then no metadata is associated with the request. + + + + Uploads the full blob. + + The content stream. + The content MD5. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that gets the stream. + + + + Uploads the block. + + The source stream. + The block ID. + The content MD5. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that uploads the block. + + + + Uploads the block list. + + The blocks to upload. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that uploads the block list. + + + + Gets the download block list. + + The types of blocks. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that gets the download block list. + + + + Default is 4 MB. + + + + + Default is 4 MB. + + + + + Initializes a new instance of the class using an absolute URI to the blob. + + The absolute URI to the blob. + + + + Initializes a new instance of the class using an absolute URI to the blob. + + The absolute URI to the blob. + The account credentials. + + + + Initializes a new instance of the class using an absolute URI to the blob. + + The absolute URI to the blob. + The snapshot timestamp, if the blob is a snapshot. + The account credentials. + + + + Initializes a new instance of the class using the specified blob name and + the parent container reference. + If snapshotTime is not null, the blob instance represents a Snapshot. + + Name of the blob. + Snapshot time in case the blob is a snapshot. + The reference to the parent container. + + + + Initializes a new instance of the class. + + The attributes. + The service client. + + + + Stores the that contains this blob. + + + + + Stores the name of this blob. + + + + + Stores the blob's parent . + + + + + Stores the blob's attributes. + + + + + Returns a shared access signature for the blob. + + The access policy for the shared access signature. + A shared access signature. + + + + Returns a shared access signature for the blob. + + The access policy for the shared access signature. + A container-level access policy. + A shared access signature. + + + + Gets the canonical name of the blob, formatted as /<account-name>/<container-name>/<blob-name>. + If ignoreSnapshotTime is false and this blob is a snapshot, the canonical name is augmented with a + query of the form ?snapshot=<snapshot-time>. + This is used by both Shared Access and Copy blob operations. + + Indicates if the snapshot time is ignored. + The canonical name of the blob. + + + + Parse URI for SAS (Shared Access Signature) and snapshot information. + + The complete Uri. + The credentials to use. + + + + Gets the object that represents the Blob service. + + A client object that specifies the Blob service endpoint. + + + + Gets or sets the block size for writing to a block blob. + + The size of a block, in bytes, ranging from between 16 KB and 4 MB inclusive. + + + + Gets or sets the minimum number of bytes to buffer when reading from a blob stream. + + The minimum number of bytes to buffer, ranging from between 1 and 4 MB inclusive. + + + + Gets the blob's system properties. + + The blob's properties. + + + + Gets the user-defined metadata for the blob. + + The blob's metadata, as a collection of name-value pairs. + + + + Gets the blob's URI. + + The absolute URI to the blob. + + + + Gets the date and time that the blob snapshot was taken, if this blob is a snapshot. + + The blob's snapshot time if the blob is a snapshot; otherwise, null. + + If the blob is not a snapshot, the value of this property is null. + + + + + Gets the state of the most recent or pending copy operation. + + A object containing the copy state, or null if no copy blob state exists for this blob. + + + + Gets the type of the blob. + + The type of the blob. + + + + Gets the blob's name. + + The blob's name. + + + + Gets a object representing the blob's container. + + The blob's container. + + + + Gets the object representing the + virtual parent directory for the blob. + + The blob's virtual parent directory. + + + + Represents a Windows Azure page blob. + + + Represents a Windows Azure page blob. + + + + + Opens a stream for reading from the blob. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A stream to be used for reading from the blob. + On the object returned by this method, the method must be called exactly once for every call. Failing to end a read process before beginning another read can cause unknown behavior. + + + + Opens a stream for writing to the blob. + + The size of the page blob, in bytes. The size must be a multiple of 512. If null, the page blob must already exist. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + A stream to be used for writing to the blob. + + + + Begins an asynchronous operation to open a stream for writing to the blob. + + The size of the page blob, in bytes. The size must be a multiple of 512. If null, the page blob must already exist. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to open a stream for writing to the blob. + + The size of the page blob, in bytes. The size must be a multiple of 512. If null, the page blob must already exist. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to open a stream for writing to the blob. + + An that references the pending asynchronous operation. + A stream to be used for writing to the blob. + + + + Downloads the contents of a blob to a stream. + + The target stream. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to download the contents of a blob to a stream. + + An that references the pending asynchronous operation. + + + + Downloads the contents of a blob to a stream. + + The target stream. + The starting offset of the data range, in bytes. + The length of the data range, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The starting offset of the data range, in bytes. + The length of the data range, in bytes. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to download the contents of a blob to a stream. + + The target stream. + The starting offset of the data range, in bytes. + The length of the data range, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to download the contents of a blob to a stream. + + An that references the pending asynchronous operation. + + + + Uploads a stream to a page blob. + + The stream providing the blob content. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to upload a stream to a page blob. + + The stream providing the blob content. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to upload a stream to a page blob. + + The stream providing the blob content. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to upload a stream to a page blob. + + An that references the pending asynchronous operation. + + + + Creates a page blob. + + The maximum size of the page blob, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to create a page blob. + + The maximum size of the page blob, in bytes. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a page blob. + + The maximum size of the blob, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to create a page blob. + + An that references the pending asynchronous operation. + + + + Resizes the blob to the specified size. + + The size of the page blob, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to resize the blob to the specified size. + + The size of the page blob, in bytes. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to resize a page blob to the specified size. + + The size of the blob, in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to resize a page blob. + + An that references the pending asynchronous operation. + + + + Checks existence of the blob. + + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the blob exists. + + + + Begins an asynchronous request to check existence of the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to check existence of the blob. + + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to check existence of the blob. + + An that references the pending asynchronous operation. + true if the blob exists. + + + + Populates a blob's properties and metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to populate the blob's properties and metadata. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to populate the blob's properties and metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to populate the blob's properties and metadata. + + An that references the pending asynchronous operation. + + + + Gets a collection of valid page ranges and their starting and ending bytes. + + The starting offset of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + The length of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + An enumerable collection of page ranges. + + + + Begins an asynchronous operation to return a collection of valid page ranges and their starting and ending bytes. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a collection of valid page ranges and their starting and ending bytes. + + The starting offset of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + The length of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a collection of valid page ranges and their starting and ending bytes. + + An that references the pending asynchronous operation. + An enumerable collection of page ranges. + + + + Updates the blob's metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the blob's metadata. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the blob's metadata. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to update the blob's metadata. + + An that references the pending asynchronous operation. + + + + Updates the blob's properties. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the blob's properties. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the blob's properties. + + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to update the blob's properties. + + An that references the pending asynchronous operation. + + + + Deletes the blob. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to delete the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete the blob. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete the blob. + + An that references the pending asynchronous operation. + + + + Deletes the blob if it already exists. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the container. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + true if the blob did already exist and was deleted; otherwise false. + + + + Begins an asynchronous request to delete the blob if it already exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to delete the blob if it already exists. + + Whether to only delete the blob, to delete the blob and all snapshots, or to only delete the snapshots. + An object that represents the access conditions for the container. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to delete the blob if it already exists. + + An that references the pending asynchronous operation. + true if the blob did already exist and was deleted; otherwise, false. + + + + Creates a snapshot of the blob. + + A collection of name-value pairs defining the metadata of the snapshot. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request, or null. + An object that represents the context for the current operation. + A blob snapshot. + + + + Begins an asynchronous operation to create a snapshot of the blob. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a snapshot of the blob. + + A collection of name-value pairs defining the metadata of the snapshot. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request, or null. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to create a snapshot of the blob. + + An that references the pending asynchronous operation. + A blob snapshot. + + + + Acquires a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + The ID of the acquired lease. + + + + Begins an asynchronous operation to acquire a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to acquire a lease on this blob. + + A representing the span of time for which to acquire the lease, + which will be rounded down to seconds. If null, an infinite lease will be acquired. If not null, this must be + greater than zero. + A string representing the proposed lease ID for the new lease, or null if no lease ID is proposed. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to acquire a lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + The ID of the acquired lease. + + + + Renews a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to renew a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to renew a lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to renew a lease on this blob. + + An that references the pending asynchronous operation. + + + + Changes the lease ID on this blob. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + The new lease ID. + + + + Begins an asynchronous operation to change the lease on this blob. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to change the lease on this blob. + + A string representing the proposed lease ID for the new lease. This cannot be null. + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to change the lease on this blob. + + An that references the pending asynchronous operation. + The new lease ID. + + + + Releases the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to release the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to release the lease on this blob. + + An object that represents the access conditions for the blob, including a required lease ID. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to release the lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + + + + Breaks the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + A representing the amount of time before the lease ends, to the second. + + + + Begins an asynchronous operation to break the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to break the current lease on this blob. + + A representing the amount of time to allow the lease to remain, + which will be rounded down to seconds. If null, the break period is the remainder of the current lease, + or zero for infinite leases. + An object that represents the access conditions for the blob. If null, no condition is used. + The options for this operation. If null, default options will be used. + An object that represents the context for the current operation. + An optional callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to break the current lease on this blob. + + An IAsyncResult that references the pending asynchronous operation. + A representing the amount of time before the lease ends, to the second. + + + + Writes pages to a page blob. + + A stream providing the page data. + The offset at which to begin writing, in bytes. The offset must be a multiple of 512. + An optional hash value that will be used to set the property + on the blob. May be null or an empty string. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to write pages to a page blob. + + A stream providing the page data. + The offset at which to begin writing, in bytes. The offset must be a multiple of 512. + An optional hash value that will be used to set the property + on the blob. May be null or an empty string. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to write pages to a page blob. + + A stream providing the page data. + The offset at which to begin writing, in bytes. The offset must be a multiple of 512. + An optional hash value that will be used to set the property + on the blob. May be null or an empty string. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to write pages to a page blob. + + An that references the pending asynchronous operation. + + + + Clears pages from a page blob. + + The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. + The length of the data range to be cleared, in bytes. The length must be a multiple of 512. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to clear pages from a page blob. + + The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. + The length of the data range to be cleared, in bytes. The length must be a multiple of 512. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to clear pages from a page blob. + + The offset at which to begin clearing pages, in bytes. The offset must be a multiple of 512. + The length of the data range to be cleared, in bytes. The length must be a multiple of 512. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to clear pages from a page blob. + + An that references the pending asynchronous operation. + + + + Requests that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The copy ID associated with the copy operation. + + This method fetches the blob's ETag, last modified time, and part of the copy state. + The copy ID and copy status fields are fetched, and the rest of the copy state is cleared. + + + + + Requests that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The copy ID associated with the copy operation. + + This method fetches the blob's ETag, last modified time, and part of the copy state. + The copy ID and copy status fields are fetched, and the rest of the copy state is cleared. + + + + + Begins an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + The URI of a source blob. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy another blob's contents, properties, and metadata + to the blob referenced by this object. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to request that the service start to copy another blob's contents, properties, and metadata + to the blob referenced by this object. + + The URI of a source blob. + An object that represents the access conditions for the source blob. If null, no condition is used. + An object that represents the access conditions for the destination blob. If null, no condition is used. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to request that the service start to copy a blob's contents, properties, and metadata to a new blob. + + An that references the pending asynchronous operation. + The copy ID associated with the copy operation. + + This method fetches the blob's ETag, last modified time, and part of the copy state. + The copy ID and copy status fields are fetched, and the rest of the copy state is cleared. + + + + + Aborts an ongoing blob copy operation. + + A string identifying the copy operation. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to abort an ongoing blob copy operation. + + A string identifying the copy operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to abort an ongoing blob copy operation. + + A string identifying the copy operation. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to abort an ongoing blob copy operation. + + An that references the pending asynchronous operation. + + + + Implements the Create method. + + The size in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that creates the blob. + + + + Implementation for the Resize method. + + The size in bytes. + An object that represents the access conditions for the blob. If null, no condition is used. + An object that specifies any additional options for the request. + A that sets the metadata. + + + + Implementation for the CreateSnapshot method. + + A collection of name-value pairs defining the metadata of the snapshot, or null. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that creates the snapshot. + If the metadata parameter is null then no metadata is associated with the request. + + + + Gets the page ranges impl. + + The starting offset of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + The length of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A for getting the page ranges. + + + + Implementation method for the WritePage methods. + + The page data. + The start offset. + The content MD5. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that writes the pages. + + + + Implementation method for the ClearPage methods. + + The start offset. Must be multiples of 512. + Length of the data range to be cleared. Must be multiples of 512. + An object that represents the access conditions for the blob. If null, no condition is used. + A object that specifies any additional options for the request. + A that writes the pages. + + + + Default is 4 MB. + + + + + Default is 4 MB. + + + + + Initializes a new instance of the class using an absolute URI to the blob. + + The absolute URI to the blob. + + + + Initializes a new instance of the class using an absolute URI to the blob. + + The absolute URI to the blob. + The account credentials. + + + + Initializes a new instance of the class using an absolute URI to the blob. + + The absolute URI to the blob. + The snapshot timestamp, if the blob is a snapshot. + The account credentials. + + + + Initializes a new instance of the class using the specified blob name and + the parent container reference. + If snapshotTime is not null, the blob instance represents a Snapshot. + + Name of the blob. + Snapshot time in case the blob is a snapshot. + The reference to the parent container. + + + + Initializes a new instance of the class. + + The attributes. + The service client. + + + + Stores the that contains this blob. + + + + + Stores the name of this blob. + + + + + Stores the blob's parent . + + + + + Stores the blob's attributes. + + + + + Returns a shared access signature for the blob. + + The access policy for the shared access signature. + A shared access signature. + + + + Returns a shared access signature for the blob. + + The access policy for the shared access signature. + A container-level access policy. + A shared access signature. + + + + Gets the canonical name of the blob, formatted as /<account-name>/<container-name>/<blob-name>. + If ignoreSnapshotTime is false and this blob is a snapshot, the canonical name is augmented with a + query of the form ?snapshot=<snapshot-time>. + This is used by both Shared Access and Copy blob operations. + + Indicates if the snapshot time is ignored. + The canonical name of the blob. + + + + Parse URI for SAS (Shared Access Signature) and snapshot information. + + The complete Uri. + The credentials to use. + + + + Gets the object that represents the Blob service. + + A client object that specifies the Blob service endpoint. + + + + Gets or sets the number of bytes to buffer when writing to a page blob stream. + + The number of bytes to buffer, ranging from between 512 bytes and 4 MB inclusive. + + + + Gets or sets the minimum number of bytes to buffer when reading from a blob stream. + + The minimum number of bytes to buffer, ranging from between 1 and 4 MB inclusive. + + + + Gets the blob's system properties. + + The blob's properties. + + + + Gets the user-defined metadata for the blob. + + The blob's metadata, as a collection of name-value pairs. + + + + Gets the blob's URI. + + The absolute URI to the blob. + + + + Gets the date and time that the blob snapshot was taken, if this blob is a snapshot. + + The blob's snapshot time if the blob is a snapshot; otherwise, null. + + If the blob is not a snapshot, the value of this property is null. + + + + + Gets the state of the most recent or pending copy operation. + + A object containing the copy state, or null if no copy blob state exists for this blob. + + + + Gets the type of the blob. + + The type of the blob. + + + + Gets the blob's name. + + The blob's name. + + + + Gets a object representing the blob's container. + + The blob's container. + + + + Gets the object representing the + virtual parent directory for the blob. + + The blob's virtual parent directory. + + + + Provides a set of methods for parsing a response containing blob data from the Blob service. + + + + + Gets the request ID from the response. + + The web response. + A unique value associated with the request. + + + + Gets the blob's properties from the response. + + The web response. + The blob's properties. + + + + Extracts the lease status from a web response. + + The web response. + A enumeration from the web response. + If the appropriate header is not present, a status of is returned. + The header contains an unrecognized value. + + + + Extracts the lease state from a web response. + + The web response. + A enumeration from the web response. + If the appropriate header is not present, a status of is returned. + The header contains an unrecognized value. + + + + Extracts the lease duration from a web response. + + The web response. + A enumeration from the web response. + If the appropriate header is not present, a status of is returned. + The header contains an unrecognized value. + + + + Extracts the lease ID header from a web response. + + The web response. + The lease ID. + + + + Extracts the remaining lease time from a web response. + + The web response. + The remaining lease time, in seconds. + + + + Gets the user-defined metadata. + + The response from server. + A of the metadata. + + + + Extracts a object from the headers of a web response. + + The HTTP web response. + A object, or null if the web response does not contain a copy status. + + + + Gets the snapshot timestamp from the response. + + The web response. + The snapshot timestamp. + + + + Reads service properties from a stream. + + The stream from which to read the service properties. + The service properties stored in the stream. + + + + Gets a from a string. + + The lease status string. + A enumeration. + If a null or empty string is supplied, a status of is returned. + The string contains an unrecognized value. + + + + Gets a from a string. + + The lease state string. + A enumeration. + If a null or empty string is supplied, a status of is returned. + The string contains an unrecognized value. + + + + Gets a from a string. + + The lease duration string. + A enumeration. + If a null or empty string is supplied, a status of is returned. + The string contains an unrecognized value. + + + + Builds a object from the given strings containing formatted copy information. + + The copy status, as a string. + The copy ID. + The source URI of the copy, as a string. + A string formatted as progressBytes/TotalBytes. + The copy completion time, as a string, or null. + The copy status description, if any. + A object populated from the given strings. + + + + A factory class for constructing a web request for working with blobs in the Blob service. + + + + + Creates a web request to get the properties of the Blob service. + + The absolute URI to the Blob service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval, in seconds. + An object for tracking the current operation. + + A web request to get the Blob service properties. + + + + + Creates a web request to set the properties of the Blob service. + + The absolute URI to the Blob service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval, in seconds. + An object for tracking the current operation. + + A web request to set the Blob service properties. + + + + + Writes Blob service properties to a stream, formatted in XML. + + The service properties to format and write to the stream. + The stream to which the formatted properties are to be written. + + + + Constructs a web request to create a new block blob or page blob, or to update the content + of an existing block blob. + + The absolute URI to the blob. + The server timeout interval. + The properties to set for the blob. + The type of the blob. + For a page blob, the size of the blob. This parameter is ignored + for block blobs. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Adds the snapshot. + + An object of type , containing additional parameters to add to the URI query string. + The snapshot version, if the blob is a snapshot. + + + + Constructs a web request to return the list of valid page ranges for a page blob. + + The absolute URI to the blob. + The server timeout interval. + The snapshot timestamp, if the blob is a snapshot. + The starting offset of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + The length of the data range over which to list page ranges, in bytes. Must be a multiple of 512. + The access condition to apply to the request. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Adds the Range Header for Blob Service Operations. + + Request + Starting byte of the range + Number of bytes in the range + + + + Constructs a web request to return the blob's system properties. + + The absolute URI to the blob. + The server timeout interval. + The snapshot timestamp, if the blob is a snapshot. + The access condition to apply to the request. + An object for tracking the current operation. + A web request for performing the operation. + + + + Constructs a web request to set system properties for a blob. + + The absolute URI to the blob. + The server timeout interval. + The blob's properties. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to resize a blob. + + The absolute URI to the blob. + The server timeout interval. + The new blob size, if the blob is a page blob. Set this parameter to null to keep the existing blob size. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to return the user-defined metadata for the blob. + + The absolute URI to the blob. + The server timeout interval. + The snapshot timestamp, if the blob is a snapshot. + The access condition to apply to the request. + An object for tracking the current operation. + A web request for performing the operation. + + + + Constructs a web request to set user-defined metadata for the blob. + + The absolute URI to the blob. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request for performing the operation. + + + + Adds user-defined metadata to the request as one or more name-value pairs. + + The web request. + The user-defined metadata. + + + + Adds user-defined metadata to the request as a single name-value pair. + + The web request. + The metadata name. + The metadata value. + + + + Constructs a web request to delete a blob. + + The absolute URI to the blob. + The server timeout interval. + The snapshot timestamp, if the blob is a snapshot. + A set of options indicating whether to delete only blobs, only snapshots, or both. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to create a snapshot of a blob. + + The absolute URI to the blob. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to use to acquire, renew, change, release or break the lease for the blob. + + The absolute URI to the blob. + The server timeout interval, in seconds. + The lease action to perform. + A lease ID to propose for the result of an acquire or change operation, + or null if no ID is proposed for an acquire operation. This should be null for renew, release, and break operations. + The lease duration, in seconds, for acquire operations. + If this is -1 then an infinite duration is specified. This should be null for renew, change, release, and break operations. + The amount of time to wait, in seconds, after a break operation before the lease is broken. + If this is null then the default time is used. This should be null for acquire, renew, change, and release operations. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Adds a proposed lease id to a request. + + The request. + The proposed lease id. + + + + Adds a lease duration to a request. + + The request. + The lease duration. + + + + Adds a lease break period to a request. + + The request. + The lease break period. + + + + Adds a lease action to a request. + + The request. + The lease action. + + + + Constructs a web request to write a block to a block blob. + + The absolute URI to the blob. + The server timeout interval. + The block ID for this block. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to create or update a blob by committing a block list. + + The absolute URI to the blob. + The server timeout interval. + The properties to set for the blob. + The access condition to apply to the request. + An object for tracking the current operation. + A web request for performing the operation. + + + + Constructs a web request to return the list of blocks for a block blob. + + The absolute URI to the blob. + The server timeout interval. + The snapshot timestamp, if the blob is a snapshot. + The types of blocks to include in the list: committed, uncommitted, or both. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to write or clear a range of pages in a page blob. + + The absolute URI to the blob. + The server timeout interval. + The page range, defined by an object of type . + A value of type , indicating the operation to perform on the page blob. + The to apply to the request. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Generates a web request to copy a blob. + + The absolute URI to the destination blob. + The server timeout interval. + The absolute URI to the source blob, including any necessary authentication parameters. + The access condition to apply to the source blob. + The access condition to apply to the destination blob. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to abort a copy operation. + + The absolute URI to the blob. + The server timeout interval. + The ID string of the copy operation to be aborted. + The access condition to apply to the request. Only lease conditions are supported for this operation. + An object for tracking the current operation. + A web request for performing the operation. + + + + Constructs a web request to get the blob's content, properties, and metadata. + + The absolute URI to the blob. + The server timeout interval. + The snapshot version, if the blob is a snapshot. + The access condition to apply to the request. + An object for tracking the current operation. + A web request for performing the operation. + + + + Constructs a web request to return a specified range of the blob's content, together with its properties and metadata. + + The absolute URI to the blob. + The server timeout interval, in seconds. + The snapshot version, if the blob is a snapshot. + The byte offset at which to begin returning content. + The number of bytes to return, or null to return all bytes through the end of the blob. + If set to true, request an MD5 header for the specified range. + The access condition to apply to the request. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Provides a set of methods for parsing a response containing container data from the Blob service. + + + + + Gets the request ID from the response. + + The web response. + A unique value associated with the request. + + + + Gets the container's properties from the response. + + The web response. + The container's attributes. + + + + Gets the user-defined metadata. + + The response from server. + A of the metadata. + + + + Gets the ACL for the container from the response. + + The web response. + A value indicating the public access level for the container. + + + + Reads the share access policies from a stream in XML. + + The stream of XML policies. + The permissions object to which the policies are to be written. + + + + Converts the ACL string to a object. + + The string to convert. + The resulting object. + + + + A factory class for constructing a web request for working with containers in the Blob service. + + + + + Constructs a web request to create a new container. + + The absolute URI to the container. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to delete the container and all of the blobs within it. + + The absolute URI to the container. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to return the user-defined metadata for this container. + + The absolute URI to the container. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to return the properties and user-defined metadata for this container. + + The absolute URI to the container. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to set user-defined metadata for the container. + + The absolute URI to the container. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to use to acquire, renew, change, release or break the lease for the container. + + The absolute URI to the container. + The server timeout interval, in seconds. + The lease action to perform. + A lease ID to propose for the result of an acquire or change operation, + or null if no ID is proposed for an acquire operation. This should be null for renew, release, and break operations. + The lease duration, in seconds, for acquire operations. + If this is -1 then an infinite duration is specified. This should be null for renew, change, release, and break operations. + The amount of time to wait, in seconds, after a break operation before the lease is broken. + If this is null then the default time is used. This should be null for acquire, renew, change, and release operations. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Adds user-defined metadata to the request as one or more name-value pairs. + + The web request. + The user-defined metadata. + + + + Adds user-defined metadata to the request as a single name-value pair. + + The web request. + The metadata name. + The metadata value. + + + + Constructs a web request to return a listing of all containers in this storage account. + + The absolute URI for the account. + The server timeout interval. + A set of parameters for the listing operation. + Additional details to return with the listing. + An object for tracking the current operation. + A web request for the specified operation. + + + + Constructs a web request to return the ACL for a container. + + The absolute URI to the container. + The server timeout interval. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to set the ACL for a container. + + The absolute URI to the container. + The server timeout interval. + The type of public access to allow for the container. + The access condition to apply to the request. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to return a listing of all blobs in the container. + + The absolute URI to the container. + The server timeout interval. + A set of parameters for the listing operation. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Gets the container Uri query builder. + + A for the container. + + + + This class represents a queue in the Windows Azure Queue service. + + + This class represents a queue in the Windows Azure Queue service. + + + + + Creates the queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to create a queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to create a queue. + + An that references the pending asynchronous operation. + + + + Creates the queue if it does not already exist. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + true if the queue did not already exist and was created; otherwise false. + + + + Begins an asynchronous request to create the queue if it does not already exist. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to create the queue if it does not already exist. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to create the queue if it does not already exist. + + An that references the pending asynchronous operation. + true if the queue did not already exist and was created; otherwise, false. + + + + Deletes the queue if it already exists. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + true if the queue did not already exist and was created; otherwise false. + + + + Begins an asynchronous request to delete the queue if it already exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to delete the queue if it already exists. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to delete the queue if it already exists. + + An that references the pending asynchronous operation. + true if the queue did not already exist and was created; otherwise, false. + + + + Deletes the queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to delete a queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete a queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete a queue. + + An that references the pending asynchronous operation. + + + + Sets permissions for the queue. + + The permissions to apply to the queue. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous request to set permissions for the queue. + + The permissions to apply to the queue. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to set permissions for the queue. + + The permissions to apply to the queue. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the result of an asynchronous request to set permissions for the queue. + + An that references the pending asynchronous operation. + + + + Gets the permissions settings for the queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The queue's permissions. + + + + Begins an asynchronous request to get the permissions settings for the queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to get the permissions settings for the queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to get the permissions settings for the queue. + + An that references the pending asynchronous operation. + The queue's permissions. + + + + Checks existence of the queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + true if the queue exists. + + + + Begins an asynchronous request to check existence of the queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to check existence of the queue. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to check existence of the queue. + + An that references the pending asynchronous operation. + true if the queue exists. + + + + Sets the queue's user-defined metadata. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to set user-defined metadata on the queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to set user-defined metadata on the queue. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous request operation to set user-defined metadata on the queue. + + An that references the pending asynchronous operation. + + + + Fetches the queue's attributes. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to fetch the queue's attributes. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to fetch the queue's attributes. + + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to fetch a queue's attributes. + + An that references the pending asynchronous operation. + + + + Adds a message to the queue. + + The message to add. + The maximum time to allow the message to be in the queue, or null. + The length of time from now during which the message will be invisible. + If null then the message will be visible immediately. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to add a message to the queue. + + The message to add. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to add a message to the queue. + + The message to add. + The maximum time to allow the message to be in the queue, or null. + The length of time from now during which the message will be invisible. + If null then the message will be visible immediately. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to add a message to the queue. + + An that references the pending asynchronous operation. + + + + Updates the visibility timeout and optionally the content of a message. + + The message to update. + The visibility timeout interval. + Flags of values that specifies which parts of the message are to be updated. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + + + + Begins an asynchronous operation to update the visibility timeout and optionally the content of a message. + + The message to update. + The visibility timeout interval. + An EnumSet of values that specifies which parts of the message are to be updated. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to update the visibility timeout and optionally the content of a message. + + The message to update. + The visibility timeout interval. + An EnumSet of values that specifies which parts of the message are to be updated. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to add a message to the queue. + + An that references the pending asynchronous operation. + + + + Deletes a message. + + A message. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Deletes the specified message from the queue. + + The message ID. + The pop receipt value. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to delete a message. + + A message. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete a message. + + The message ID. + The pop receipt value. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete a message. + + An that references the pending asynchronous operation. + + + + Gets the specified number of messages from the queue using the specified request options and + operation context. This operation marks the retrieved messages as invisible in the queue for the default + visibility timeout period. + + The number of messages to retrieve. + The visibility timeout interval. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + An enumerable collection of messages. + + + + Begins an asynchronous operation to get messages from the queue. + + The number of messages to retrieve. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get the specified number of messages from the queue using the + specified request options and operation context. This operation marks the retrieved messages as invisible in the + queue for the default visibility timeout period. + + The number of messages to retrieve. + The visibility timeout interval. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get messages from the queue. + + An that references the pending asynchronous operation. + An enumerable collection of messages. + + + + Gets a message from the queue using the default request options. This operation marks the retrieved message as invisible in the queue for the default visibility timeout period. + + The visibility timeout interval. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + A message. + + + + Begins an asynchronous operation to get a single message from the queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get a single message from the queue, and specifies how long the message should be + reserved before it becomes visible, and therefore available for deletion. + + The visibility timeout interval. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get a single message from the queue. + + An that references the pending asynchronous operation. + A message. + + + + Peeks a message from the queue, using the specified request options and operation context. A peek request retrieves a message from the queue without changing its visibility. + + The number of messages to peek. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + An enumerable collection of messages. + + + + Begins an asynchronous operation to peek messages from the queue. + + The number of messages to peek. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to peek messages from the queue. + + The number of messages to peek. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to peek messages from the queue. + + An that references the pending asynchronous operation. + An enumerable collection of messages. + + + + Peeks a single message from the queue. A peek request retrieves a message from the queue without changing its visibility. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + A message. + + + + Begins an asynchronous operation to get a single message from the queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to peek a single message from the queue. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to peek a single message from the queue. + + An that references the pending asynchronous operation. + A message. + + + + Clears all messages from the queue. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + + + + Begins an asynchronous operation to clear all messages from the queue. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to clear all messages from the queue. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests to the storage service, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to clear all messages from the queue. + + An that references the pending asynchronous operation. + + + + Implementation for the ClearMessages method. + + An object that specifies any additional options for the request. + A that gets the permissions. + + + + Implementation for the Create method. + + An object that specifies any additional options for the request. + A that creates the queue. + + + + Implementation for the Delete method. + + An object that specifies any additional options for the request. + A that deletes the queue. + + + + Implementation for the FetchAttributes method. + + An object that specifies any additional options for the request. + A that fetches the attributes. + + + + Implementation for the Exists method. + + An object that specifies any additional options for the request. + A that checks existence. + + + + Implementation for the SetMetadata method. + + An object that specifies any additional options for the request. + A that sets the metadata. + + + + Implementation for the SetPermissions method. + + The permissions to set. + An object that specifies any additional options for the request. + A that sets the permissions. + + + + Implementation for the GetPermissions method. + + An object that specifies any additional options for the request. + A that gets the permissions. + + + + Implementation for the AddMessageImpl method. + + A queue message. + A value indicating the message time-to-live. + The visibility delay for the message. + An object that specifies any additional options for the request. + A that sets the permissions. + + + + Implementation for the UpdateMessage method. + + A queue message. + The visibility timeout for the message. + Indicates whether to update the visibility delay, message contents, or both. + An object that specifies any additional options for the request. + A that sets the permissions. + + + + Implementation for the DeleteMessage method. + + The message ID. + The pop receipt value. + An object that specifies any additional options for the request. + A that deletes the queue. + + + + Implementation for the GetPermissions method. + + The number of messages to retrieve. + The visibility timeout interval. + An object that specifies any additional options for the request. + A that gets the permissions. + + + + Implementation for the PeekMessages method. + + The number of messages to retrieve. + An object that specifies any additional options for the request. + A that gets the permissions. + + + + Gets the ApproximateMessageCount and metadata from response. + + The web response. + + + + Update the message pop receipt and next visible time. + + The Cloud Queue Message. + The web response. + + + + Initializes a new instance of the class. + + The absolute URI to the queue. + + + + Initializes a new instance of the class. + + The absolute URI to the queue. + The account credentials. + + + + Initializes a new instance of the class. + + The queue name. + A client object that specifies the endpoint for the queue service. + + + + Uri for the messages. + + + + + Gets the Uri for general message operations. + + + + + Gets the individual message address. + + The message id. + The URI of the message. + + + + Parse URI for SAS (Shared Access Signature) information. + + The complete Uri. + The credentials to use. + + + + Returns the canonical name for shared access. + + The canonical name. + + + + Selects the get message response. + + The protocol message. + The parsed message. + + + + Selects the peek message response. + + The protocol message. + The parsed message. + + + + Returns a shared access signature for the queue. + + The access policy for the shared access signature. + A queue-level access policy. + A shared access signature. + + + + Gets the service client for the queue. + + A client object that specifies the endpoint for the queue service. + + + + Gets the queue's URI. + + The absolute URI to the queue. + + + + Gets the name of the queue. + + The queue's name. + + + + Gets the approximate message count for the queue. + + The approximate message count. + + + + Gets or sets a value indicating whether to apply base64 encoding when adding or retrieving messages. + + True to encode messages; otherwise, false. The default value is true. + + + + Gets the queue's metadata. + + The queue's metadata. + + + + Provides a client-side logical representation of the Windows Azure Queue Service. This client is used to configure and execute requests against the Queue Service. + + The service client encapsulates the base URI for the Queue service. If the service client will be used for authenticated access, it also encapsulates the credentials for accessing the storage account. + + Provides a client-side logical representation of the Windows Azure Queue Service. This client is used to configure and execute requests against the Queue Service. + + The service client encapsulates the base URI for the Queue service. If the service client will be used for authenticated access, it also encapsulates the credentials for accessing the storage account. + + + + Returns an enumerable collection of the queues in the storage account. + + An enumerable collection of queues . + + + + Returns an enumerable collection of the queues in the storage account whose names begin with the specified prefix and that are retrieved lazily. + + The queue name prefix. + An enumeration value that indicates which details to include in the listing. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + An enumerable collection of objects that implement and are retrieved lazily. + + + + Returns a result segment containing a collection of queues in the storage account. + + A continuation token returned by a previous listing operation. + A result segment containing objects that implement . + + + + Returns a result segment containing a collection of queues in the storage account. + + The queue name prefix. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + A result segment containing objects that implement . + + + + Returns a result segment containing a collection of queues in the storage account. + + The queue name prefix. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + A result segment. + + + + Begins an asynchronous operation to return a result segment containing a collection of queue items. + + A returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a result segment containing a collection of queue items. + + The queue name prefix. + A enumeration describing which items to include in the listing. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is zero, the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + An object that specifies any additional options for the request. + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a result segment containing a collection of queue items. + + An that references the pending asynchronous operation. + A queue result segment. + + + + Core implementation of the ListQueues method. + + The queue name prefix. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000. + A enumeration describing which items to include in the listing. + An object that specifies any additional options for the request. + The continuation token. + A that lists the queues. + + + + Begins an asynchronous operation to get the properties of the queue service. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get the properties of the queue service. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get the properties of the queue service. + + The result returned from a prior call to . + A object containing the queue service properties. + + + + Gets the properties of the queue service. + + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + The queue service properties. + + + + Begins an asynchronous operation to set the properties of the queue service. + + The queue service properties. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to set the properties of the queue service. + + The queue service properties. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to set the properties of the queue service. + + The result returned from a prior call to . + + + + Sets the properties of the queue service. + + The queue service properties. + A object that specifies any additional options for the request. Specifying null will use the default request options from the associated service client (). + An object that represents the context for the current operation. This object is used to track requests, and to provide additional runtime information about the operation. + + + + The default server and client timeout interval. + + + + + Max execution time across all potential retries. + + + + + Initializes a new instance of the class using the specified queue service endpoint + and anonymous credentials. + + The queue service endpoint to use to create the client. + + + + Initializes a new instance of the class using the specified queue service endpoint + and account credentials. + + The queue service endpoint to use to create the client. + The account credentials. + + + + Initializes a new instance of the class. + + True to use path style Uris. + The queue service endpoint to use to create the client. + The account credentials. + + + + Returns a reference to a object with the specified name. + + The name of the queue, or an absolute URI to the queue. + A reference to a queue. + + + + Gets or sets the authentication scheme to use to sign HTTP requests. + + + + + Gets the authentication handler used to sign HTTP requests. + + The authentication handler. + + + + Gets the account credentials used to create the queue service client. + + The account credentials. + + + + Gets the base URI for the queue service client. + + The base URI used to construct the queue service client. + + + + Gets or sets the default retry policy for requests made via the queue service client. + + The retry policy. + + + + Gets or sets the default server and client timeout for requests. + + The server and client timeout interval. + + + + Gets or sets the maximum execution time across all potential retries. + + The maximum execution time across all potential retries. + + + + Gets a value indicating whether the service client is used with Path style or Host style. + + Is true if use path style uris; otherwise, false. + + + + Represents a message in the Windows Azure Queue service. + + + Represents a message in the Windows Azure Queue service. + + + + + The maximum message size in bytes. + + + + + The maximum number of messages that can be peeked at a time. + + + + + Initializes a new instance of the class with the given byte array. + + The content of the message as a byte array. + + + + Sets the content of this message. + + The new message content. + + + + The maximum amount of time a message is kept in the queue. + + + + + Custom UTF8Encoder to throw exception in case of invalid bytes. + + + + + Initializes a new instance of the class with the given byte array. + + + + + Initializes a new instance of the class with the given string. + + The content of the message as a string of text. + + + + Initializes a new instance of the class with the given message ID and pop receipt. + + The message ID. + The pop receipt token. + + + + Initializes a new instance of the class with the given Base64 encoded string. + This method is only used internally. + + The text string. + Whether the string is Base64 encoded. + + + + Gets the content of the message for transfer (internal use only). + + Indicates if the message should be encoded. + The message content as a string. + + + + Sets the content of this message. + + The new message content. + + + + Gets the maximum message size in bytes. + + The maximum message size in bytes. + + + + Gets the maximum amount of time a message is kept in the queue. + + The maximum amount of time a message is kept in the queue. + + + + Gets the maximum number of messages that can be peeked at a time. + + The maximum number of messages that can be peeked at a time. + + + + Gets the content of the message as a byte array. + + The content of the message as a byte array. + + + + Gets the message ID. + + The message ID. + + + + Gets the message's pop receipt. + + The pop receipt value. + + + + Gets the time that the message was added to the queue. + + The time that that message was added to the queue. + + + + Gets the time that the message expires. + + The time that the message expires. + + + + Gets the time that the message will next be visible. + + The time that the message will next be visible. + + + + Gets the content of the message, as a string. + + The message content. + + + + Gets the number of times this message has been dequeued. + + The number of times this message has been dequeued. + + + + Gets message type that indicates if the RawString is the original message string or Base64 encoding of the original binary data. + + + + + Gets or sets the original message string or Base64 encoding of the original binary data. + + The original message string. + + + + Provides a set of methods for parsing a response containing queue data from the Queue service. + + + + + Gets the request ID from the response. + + The web response. + A unique value associated with the request. + + + + Gets the approximate message count for the queue. + + The web response. + The approximate count for the queue. + + + + Gets the user-defined metadata. + + The response from server. + An object of type containing the metadata. + + + + Extracts the pop receipt from a web response header. + + The web response. + The pop receipt stored in the header of the response. + + + + Extracts the next visibility time from a web response header. + + The web response. + The time of next visibility stored in the header of the response. + + + + Reads service properties from a stream. + + The stream from which to read the service properties. + The service properties stored in the stream. + + + + Reads the share access policies from a stream in XML. + + The stream of XML policies. + The permissions object to which the policies are to be written. + + + + A factory class for constructing a web request against the Queue service. + + + + + Creates a web request to get the properties of the Queue service. + + The absolute URI to the Queue service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval, in seconds. + An object for tracking the current operation. + + A web request to get the Queue service properties. + + + + + Creates a web request to set the properties of the Queue service. + + The absolute URI to the Queue service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval, in seconds. + An object for tracking the current operation. + + A web request to set the Queue service properties. + + + + + Writes Queue service properties to a stream, formatted in XML. + + The service properties to format and write to the stream. + The stream to which the formatted properties are to be written. + + + + Constructs a web request to create a new queue. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to delete the queue and all of the messages within it. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to clear all messages in the queue. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to return the user-defined metadata for this queue. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Generates a web request to set user-defined metadata for the queue. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Adds user-defined metadata to the request as one or more name-value pairs. + + The web request. + The user-defined metadata. + + + + Adds user-defined metadata to the request as a single name-value pair. + + The web request. + The metadata name. + The metadata value. + + + + Constructs a web request to return a listing of all queues in this storage account. + + The absolute URI for the account. + The server timeout interval. + A set of parameters for the listing operation. + Additional details to return with the listing. + An object for tracking the current operation. + A web request for the specified operation. + + + + Constructs a web request to return the ACL for a queue. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to set the ACL for a queue. + + The absolute URI to the queue. + The server timeout interval. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to add a message for a queue. + + The absolute URI to the queue. + The server timeout interval. + The message time-to-live, in seconds. + The visibility timeout, in seconds. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Constructs a web request to update a message. + + The absolute URI to the message to update. + The server timeout interval, in seconds. + The pop receipt of the message. + The length of time from now during which the message will be invisible, in seconds. + An object for tracking the current operation. + A web request for the update operation. + + + + Constructs a web request to update a message. + + The absolute URI to the message to update. + The server timeout interval, in seconds. + The pop receipt of the message. + An object for tracking the current operation. + A web request for the update operation. + + + + Constructs a web request to get messages for a queue. + + The absolute URI to the queue. + The server timeout interval. + The number of messages. + The visibility timeout. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Constructs a web request to peeks messages for a queue. + + The absolute URI to the queue. + The server timeout interval. + The number of messages. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Represents a object for use with the Windows Azure Table service. + + The class does not support concurrent queries or requests. + + + + Initializes a new instance of the class. + + + + + Callback on DataContext object sending request. + + The sender. + The instance containing the event data. + + + + Begins an asynchronous operation to save changes, using the retry policy specified for the service context. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to save changes, using the retry policy specified for the service context. + + Additional options for saving changes. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to save changes, using the retry policy specified for the service context. + + Additional options for saving changes. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + + An that references the asynchronous operation. + + + + Ends an asynchronous operation to save changes. + + An that references the pending asynchronous operation. + A that represents the result of the operation. + + + + Saves changes, using the retry policy specified for the service context. + + A that represents the result of the operation. + + + + Saves changes, using the retry policy specified for the service context. + + Additional options for saving changes. + + + A that represents the result of the operation. + + + + Releases unmanaged resources. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Gets the object that represents the Table service. + + A client object that specifies the Table service endpoint. + + + + Gets the authentication handler used to sign HTTP requests. + + The authentication handler. + + + + Represents an entity in the Windows Azure Table service. + + + + + Initializes a new instance of the class. + + The partition key. + The row key. + + + + Initializes a new instance of the class. + + + + + Gets or sets the timestamp for the entity. + + The entity's timestamp. + + + + Gets or sets the partition key of a table entity. + + The partition key. + + + + Gets or sets the row key of a table entity. + + The row key. + + + + Provides a set of extensions for the Table service. + + + + + Converts the query into a object that supports + additional operations like retries. + + The type of the element. + The query. + A object that represents the runtime context of the Table service. + The converted query. + + + + A class for constructing a query against the Table service. + + The type of the element. + + + + Initializes a new instance of the class. + + An object that implements . + A object. + + + + Expands the specified path. + + The path to expand. + A new query with the expanded path. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Executes the request with any specified options. + + An object of type . + An object for tracking the current operation. + + + + + Begins an asynchronous operation to execute a query and return the results as a result segment. + + A continuation token returned by a previous listing operation, can be null. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to execute a query and return the results as a result segment. + + A continuation token returned by a previous listing operation, can be null. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + + An that references the asynchronous operation. + + + + Ends an asynchronous operation to execute a query and return the results as a result segment. + + The reference to the pending asynchronous request to finish. + A result segment containing objects of type . + + + + Executes a segmented query against the Table service. + + The continuation token. + The request options. + An object for tracking the current operation. + A result segment containing objects of type . + + + + Gets the table service context. + + + An object of type . + + + + + Stores the wrapped . + + + + + Gets the type of the element(s) that are returned when the expression tree associated with this + instance of is executed. + + + A that represents the type of the element(s) that are returned when the expression tree associated with this object is executed. + + + + + Gets the expression tree that is associated with the instance of . + + + The that is associated with this instance of . + + + + + Gets the query provider that is associated with this data source. + + + The that is associated with this data source. + + + + + Provides a set of methods for constructing requests against the Table service. + + + + + Creates a web request to get the properties of the Table service. + + The absolute URI to the Table service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval, in seconds. + An object for tracking the current operation. + + A web request to get the Table service properties. + + + + + Creates a web request to set the properties of the Table service. + + The absolute URI to the Table service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval, in seconds. + An object for tracking the current operation. + + A web request to set the Table service properties. + + + + + Writes Table service properties to a stream, formatted in XML. + + The service properties to format and write to the stream. + The stream to which the formatted properties are to be written. + + + + Constructs a web request to return the ACL for a table. + + The absolute URI to the table. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Constructs a web request to set the ACL for a table. + + The absolute URI to the table. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval. + An object for tracking the current operation. + + A web request to use to perform the operation. + + + + + Provides a set of methods for parsing a response stream from the Table service. + + + + + Gets the request ID from the response. + + The web response. + A unique value associated with the request. + + + + Reads service properties from a stream. + + The stream from which to read the service properties. + The service properties stored in the stream. + + + + Reads the share access policies from a stream in XML. + + The stream of XML policies. + The permissions object to which the policies are to be written. + + + + Translates the data service client exception. + + The exception. + The request result. + + The translated exception. + + + + + Look for an inner exception of type T. + + The exception. + The found exception or null. + + + + Applies the continuation to query. + + The continuation token. + The local query. + The modified query. + + + + Gets the query take count. + + The type of the element. + The query. + The default value. + + The take count of the query, if any. + + + + + Gets the table continuation from response. + + The response. + The continuation. + + + + Copies the headers and properties from a request into a different request. + + The request to copy into. + The request to copy from. + + + + Gets an ETag from a response. + + The web response. + A quoted ETag string. + + + + Gets the user-defined metadata. + + The response from server. + A of the metadata. + + + + Gets the metadata or properties. + + The response from server. + The prefix for all the headers. + A of the headers with the prefix. + + + + Reads service properties from a stream. + + The stream from which to read the service properties. + The service properties stored in the stream. + + + + Reads a collection of shared access policies from the specified object. + + A collection of shared access policies to be filled. + A policy response object for reading the stream. + The type of policy to read. + + + + Creates the web request. + + The HTTP method. + The request URI. + The timeout. + An object of type , containing additional parameters to add to the URI query string. + An object for tracking the current operation. + + A web request for performing the operation. + + + + + Creates the specified URI. + + The URI to create. + The timeout. + The builder. + An object for tracking the current operation. + A web request for performing the operation. + + + + Constructs a web request to return the ACL for a cloud resource. + + The absolute URI to the resource. + The server timeout interval. + An optional query builder to use. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Constructs a web request to set the ACL for a cloud resource. + + The absolute URI to the resource. + The server timeout interval. + An optional query builder to use. + An object for tracking the current operation. + A web request to use to perform the operation. + + + + Gets the properties. + + The URI to query. + The timeout. + The builder. + An object for tracking the current operation. + A web request for performing the operation. + + + + Gets the metadata. + + The blob Uri. + The timeout. + The builder. + An object for tracking the current operation. + A web request for performing the operation. + + + + Sets the metadata. + + The blob Uri. + The timeout. + The builder. + An object for tracking the current operation. + A web request for performing the operation. + + + + Adds the metadata. + + The request. + The metadata. + + + + Adds the metadata. + + The request. + The metadata name. + The metadata value. + + + + Deletes the specified URI. + + The URI of the resource to delete. + The timeout. + The builder. + An object for tracking the current operation. + A web request for performing the operation. + + + + Creates a web request to get the properties of the service. + + The absolute URI to the service. + An object of type , containing additional parameters to add to the URI query string. + The server timeout interval. + An object for tracking the current operation. + + A web request to get the service properties. + + + + + Creates a web request to set the properties of the service. + + The absolute URI to the service. + The builder. + The server timeout interval. + An object for tracking the current operation. + + A web request to set the service properties. + + + + + Generates a query builder for building service requests. + + A for building service requests. + + + + Adds the lease id. + + The request. + The lease id. + + + + Adds an optional header to a request. + + The web request. + The metadata name. + The metadata value. + + + + Adds an optional header to a request. + + The web request. + The header name. + The header value. + + + + Applies the condition to the web request. + + The request to be modified. + Access condition to be added to the request. + + + + Applies the condition for a source blob to the web request. + + The request to be modified. + Access condition to be added to the request. + + + + Represents a canonicalizer that converts HTTP request data into a standard form appropriate for signing. + For detailed information on how to authenticate a request, + see Authentication for the Windows Azure Storage Services. + + + + + Converts the specified HTTP request data into a standard form appropriate for signing. + + The HTTP request that needs to be signed. + The name of the storage account that the HTTP request will access. + The canonicalized string containing the HTTP request data in a standard form appropriate for signing. + Authentication for the Windows Azure Storage Services + + + + Gets the authorization scheme used for canonicalization. + + The authorization scheme used for canonicalization. + Authentication for the Windows Azure Storage Services + + + + Represents a canonicalizer that converts HTTP request data into a standard form appropriate for signing via + the Shared Key authentication scheme for the Blob or Queue service. + + Authentication for the Windows Azure Storage Services + + + + Converts the specified HTTP request data into a standard form appropriate for signing. + + The HTTP request that needs to be signed. + The name of the storage account that the HTTP request will access. + The canonicalized string containing the HTTP request data in a standard form appropriate for signing. + Authentication for the Windows Azure Storage Services + + + + Gets a static instance of the object. + + The static instance of the class. + Authentication for the Windows Azure Storage Services + + + + Gets the authorization scheme used for canonicalization. + + The authorization scheme used for canonicalization. + Authentication for the Windows Azure Storage Services + + + + Represents a canonicalizer that converts HTTP request data into a standard form appropriate for signing via + the Shared Key Lite authentication scheme for the Blob or Queue service. + + Authentication for the Windows Azure Storage Services + + + + Converts the specified HTTP request data into a standard form appropriate for signing. + + The HTTP request that needs to be signed. + The name of the storage account that the HTTP request will access. + The canonicalized string containing the HTTP request data in a standard form appropriate for signing. + Authentication for the Windows Azure Storage Services + + + + Gets a static instance of the object. + + The static instance of the class. + Authentication for the Windows Azure Storage Services + + + + Gets the authorization scheme used for canonicalization. + + The authorization scheme used for canonicalization. + Authentication for the Windows Azure Storage Services + + + + Represents a canonicalizer that converts HTTP request data into a standard form appropriate for signing via + the Shared Key Lite authentication scheme for the Table service. + + Authentication for the Windows Azure Storage Services + + + + Converts the specified HTTP request data into a standard form appropriate for signing. + + The HTTP request that needs to be signed. + The name of the storage account that the HTTP request will access. + The canonicalized string containing the HTTP request data in a standard form appropriate for signing. + Authentication for the Windows Azure Storage Services + + + + Gets a static instance of the object. + + The static instance of the class. + Authentication for the Windows Azure Storage Services + + + + Gets the authorization scheme used for canonicalization. + + The authorization scheme used for canonicalization. + Authentication for the Windows Azure Storage Services + + + + Represents a canonicalizer that converts HTTP request data into a standard form appropriate for signing via + the Shared Key authentication scheme for the Table service. + + Authentication for the Windows Azure Storage Services + + + + Converts the specified HTTP request data into a standard form appropriate for signing. + + The HTTP request that needs to be signed. + The name of the storage account that the HTTP request will access. + The canonicalized string containing the HTTP request data in a standard form appropriate for signing. + Authentication for the Windows Azure Storage Services + + + + Gets a static instance of the object. + + The static instance of the class. + Authentication for the Windows Azure Storage Services + + + + Gets the authorization scheme used for canonicalization. + + The authorization scheme used for canonicalization. + Authentication for the Windows Azure Storage Services + + + + Helper class to allow an APM Method to be executed with a given timeout in milliseconds + + + + + User's timeout callback + + + + + This class provides asynchronous semaphore functionality (based on Stephen Toub's blog). + + + + + Represnts the async result returned by a storage command. + + + + + The callback provided by the user. + + + + + The state for the callback. + + + + + Indicates whether a task is completed. + + + + + Indicates whether task completed synchronously. + + + + + The event for blocking on this task's completion. + + + + + Initializes a new instance of the StorageCommandAsyncResult class. + + The callback method to be used on completion. + The state for the callback. + + + + We implement the dispose only to allow the explicit closing of the event. + + + + + Releases unmanaged and - optionally - managed resources. + + Set to true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Provides the lazy initialization of the WaitHandle (based on Joe Duffy's blog). + + The WaitHandle to use for waiting on completion. + + + + Called on completion of the async operation to notify the user + (Based on Joe Duffy's lockless design). + + + + + Blocks the calling thread until the async operation is completed. + + + + + Updates the CompletedSynchronously flag with another asynchronous operation result. + + Set to true if the last operation was completed synchronously; false if it was completed asynchronously. + + + + Gets A user-defined object that contains information about the asynchronous operation. + + + + + Gets a System.Threading.WaitHandle that is used to wait for an asynchronous operation to complete. + + + + + Gets a value indicating whether the asynchronous operation completed synchronously. + + + + + Gets a value indicating whether the asynchronous operation has completed. + + + + + Initializes a new instance of the ChainedAsyncResult class. + + The callback method to be used on completion. + The state for the callback. + + + + Called on completion of the async operation to notify the user + + Exception that was caught by the caller. + + + + Blocks the calling thread until the async operation is completed and throws + any stored exceptions. + + + + + The class is provides the helper functions to do Fisma compliant MD5. + + + + + Cryptographic service provider. + + + + + Access to the private keys is not required and the user interface can be bypassed. + + + + + ALG_ID value that identifies the hash algorithm to use. + + + + + The hash value or message hash for the hash object specified by hashHandle. + + + + + The address to which the function copies a handle to the new hash object. Has to be released by calling the CryptDestroyHash function after we are finished using the hash object. + + + + + A handle to a CSP created by a call to CryptAcquireContext. + + + + + Whether this object has been torn down or not. + + + + + Finalizes an instance of the NativeMD5 class, unhooking it from all events. + + + + + Create a Fisma hash. + + + + + Calculates an ongoing hash. + + The data to calculate the hash on. + The offset in the input buffer to calculate from. + The number of bytes to use from input. + + + + Retrieves the string representation of the hash. (Completes the creation of the hash). + + The data to calculate the hash on. + The offset in the input buffer to calculate from. + The number of bytes to use from input. + A byte aray that is the content of the hash. + + + + Validates the status returned by all the crypto functions and throws exception. + + The boolean status returned by the crypto functions. + + + + Releases the unmanaged resources and optionally releases the managed resources. + + + + + Releases the unmanaged resources. + + + + + Represents a Windows Azure Table. + + + Represents a Windows Azure Table. + + + + + Executes the operation on a table, using the specified and . + + A object that represents the operation to perform. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + A containing the result of executing the operation on the table. + + + + Begins an asynchronous table operation. + + A object that represents the operation to perform. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous table operation using the specified and . + + A object that represents the operation to perform. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous table operation. + + An that references the pending asynchronous operation. + A containing the result executing the operation on the table. + + + + Executes a batch operation on a table as an atomic operation, using the specified and . + + The object representing the operations to execute on the table. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + An enumerable collection of objects that contains the results, in order, of each operation in the on the table. + + + + Begins an asynchronous operation to execute a batch of operations on a table. + + The object representing the operations to execute on the table. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to execute a batch of operations on a table, using the specified and . + + The object representing the operations to execute on the table. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous batch of operations on a table. + + An that references the pending asynchronous operation. + A enumerable collection of type that contains the results, in order, of each operation in the on the table. + + + + Executes a query on a table, using the specified and . + + A representing the query to execute. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + An enumerable collection of objects, representing table entities returned by the query. + + + + Executes a query in segmented mode with the specified continuation token, , and . + + A representing the query to execute. + A object representing a continuation token from the server when the operation returns a partial result. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + A object containing the results of executing the query. + + + + Begins an asynchronous segmented query operation using the specified continuation token. + + A representing the query to execute. + A object representing a continuation token from the server when the operation returns a partial result. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to query a table in segmented mode using the specified continuation token, , and . + + A representing the query to execute. + A object representing a continuation token from the server when the operation returns a partial result. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous segmented query operation. + + An that references the pending asynchronous operation. + A object containing the results of executing the query. + + + + Executes a query on a table, using the specified and . + + The entity type of the query. + A TableQuery instance specifying the table to query and the query parameters to use, specialized for a type T implementing TableEntity. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + An enumerable collection, specialized for type TElement, of the results of executing the query. + + + + Queries a table in segmented mode using the specified continuation token, , and . + + The entity type of the query. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + A object representing a continuation token from the server when the operation returns a partial result. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + A , specialized for type TElement, containing the results of executing the query. + + + + Begins an asynchronous operation to query a table in segmented mode, using the specified continuation token. + + The entity type of the query. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + A object representing a continuation token from the server when the operation returns a partial result. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to query a table in segmented mode using the specified continuation token and . + + The entity type of the query. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + A object representing a continuation token from the server when the operation returns a partial result. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous segmented table query operation. + + The entity type of the query. + An that references the pending asynchronous operation. + A , specialized for type TElement, containing the results of executing the query. + + + + Executes a query, using the specified and , applying the to the result. + + The entity type of the query. + The type into which the will project the query results. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + An instance which creates a projection of the table query result entities into the specified type R. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + An enumerable collection, containing the projection into type R, of the results of executing the query. + + + + Executes a query in segmented mode with the specified continuation token, using the specified and , applying the to the results. + + The entity type of the query. + The type into which the will project the query results. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + An instance which creates a projection of the table query result entities into the specified type R. + A object representing a continuation token from the server when the operation returns a partial result. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + A containing the projection into type R of the results of executing the query. + + + + Begins an asynchronous operation to query a table in segmented mode, using the specified and continuation token. + + The entity type of the query. + The type into which the will project the query results. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + An instance which creates a projection of the table query result entities into the specified type R. + A object representing a continuation token from the server when the operation returns a partial result. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to execute a query in segmented mode with the specified continuation token, , and , applies the to the results. + + The entity type of the query. + The type into which the will project the query results. + A instance specifying the table to query and the query parameters to use, specialized for a type TElement. + An instance which creates a projection of the table query result entities into the specified type R. + A object representing a continuation token from the server when the operation returns a partial result. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous segmented table query operation. + + The entity type of the query. + The type into which the will project the query results. + An that references the pending asynchronous operation. + A containing the projection into type R of the results of executing the query. + + + + Begins an asynchronous operation to create a table. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a table. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to create a table. + + An that references the pending asynchronous operation. + + + + Creates a table. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + + + + Begins an asynchronous operation to create a table if it does not already exist. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to create a table if it does not already exist. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to determine whether a table exists. + + An that references the pending asynchronous operation. + true if table exists; otherwise, false. + + + + Creates the table if it does not already exist. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + true if table was created; otherwise, false. + + + + Begins an asynchronous operation to delete a table. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete a table. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete a table. + + An that references the pending asynchronous operation. + + + + Deletes a table. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + + + + Begins an asynchronous operation to delete the tables if it exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to delete the tables if it exists. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to delete the tables if it exists. + + An that references the pending asynchronous operation. + true if the table was deleted; otherwise, false. + + + + Deletes the table if it exists. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + true if the table was deleted; otherwise, false. + + + + Begins an asynchronous operation to determine whether a table exists. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to determine whether a table exists. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to determine whether a table exists. + + An that references the pending asynchronous operation. + true if table exists; otherwise, false. + + + + Checks whether the table exists. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + true if table exists; otherwise, false. + + + + Begins an asynchronous request to get the permissions settings for the table. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to get the permissions settings for the table. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to get the permissions settings for the table. + + An that references the pending asynchronous operation. + The table's permissions. + + + + Gets the permissions settings for the table. + + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The table's permissions. + + + + Begins an asynchronous request to set permissions for the table. + + The permissions to apply to the table. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous request to set permissions for the table. + + The permissions to apply to the table. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Returns the asynchronous result of the request to get the permissions settings for the table. + + An that references the pending asynchronous operation. + + + + Sets the permissions settings for the table. + + A object that represents the permissions to set. + A object that specifies execution options, such as retry policy and timeout settings, for the operation. + An object for tracking the current operation. + + + + Initializes a new instance of the class. + + The Table address. + The client. + + + + Initializes a new instance of the class. + + The absolute URI to the table. + The account credentials. + + + + Initializes a new instance of the class. + + The absolute URI to the table. + The storage account credentials. + If set to true, use path style Uris. + + + + Initializes a new instance of the class. + + True to use path style Uris. + The absolute URI to the table. + The credentials. + + + + Returns a shared access signature for the table. + + The access policy for the shared access signature. + An access policy identifier. + The start partition key, or null. + The start row key, or null. + The end partition key, or null. + The end row key, or null. + A shared access signature. + Thrown if the current credentials don't support creating a shared access signature. + + + + Returns the name of the table. + + The name of the table. + + + + Gets the canonical name of the table, formatted as /<account-name>/<table-name>. + + The canonical name of the table. + + + + Gets the object that represents the Table service. + + A client object that specifies the Table service endpoint. + + + + Gets the table name. + + The table name. + + + + Gets the URI that identifies the table. + + The address of the table. + + + + Provides a client-side logical representation of the Windows Azure Table Service. This client is used to configure and execute requests against the Table Service. + + The service client encapsulates the base URI for the Table service. If the service client will be used for authenticated access, it also encapsulates the credentials for accessing the storage account. + + Provides a client-side logical representation of the Windows Azure Table Service. This client is used to configure and execute requests against the Table Service. + + The service client encapsulates the base URI for the Table Service. If the service client will be used for authenticated access, it also encapsulates the credentials for accessing the storage account. + + + + Returns an enumerable collection of tables that begin with the specified prefix and that are retrieved lazily. + + An enumerable collection of tables that are retrieved lazily. + + + + Returns an enumerable collection of tables, which are retrieved lazily, that begin with the specified prefix. + + The table name prefix. + A object that specifies any additional options for the request. + An object that provides information on how the operation executed. + An enumerable collection of tables that are retrieved lazily. + + + + Begins an asynchronous operation to return a result segment containing a collection of tables + in the storage account. + + A returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a result segment containing a collection + of tables beginning with the specified prefix. + + The table name prefix. + A returned by a previous listing operation. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to return a result segment containing a collection + of tables beginning with the specified prefix. + + The table name prefix. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is zero the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + The server timeout, maximum execution time, and retry policies for the operation. + An object that provides information on how the operation executed. + The callback delegate that will receive notification when the asynchronous operation completes. + A user-defined object that will be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to return a result segment containing a collection + of tables. + + An that references the pending asynchronous operation. + A result segment containing tables. + + + + Returns an enumerable collection of tables in the storage account. + + A returned by a previous listing operation. + An enumerable collection of tables. + + + + Returns an enumerable collection of tables, which are retrieved lazily, that begin with the specified prefix. + + The table name prefix. + A returned by a previous listing operation. + An enumerable collection of tables that are retrieved lazily. + + + + Returns an enumerable collection of tables that begin with the specified prefix and that are retrieved lazily. + + The table name prefix. + A non-negative integer value that indicates the maximum number of results to be returned at a time, up to the + per-operation limit of 5000. If this value is zero the maximum possible number of results will be returned, up to 5000. + A returned by a previous listing operation. + A object that specifies any additional options for the request. + An object that provides information on how the operation executed. + An enumerable collection of tables that are retrieved lazily. + + + + Begins an asynchronous operation to get the properties of the table service. + + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to get the properties of the table service. + + A object that specifies any additional options for the request. + An object that provides information on how the operation executed. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to get the properties of the table service. + + The result returned from a prior call to . + The table service properties. + + + + Gets the properties of the table service. + + A object that specifies any additional options for the request. + An object that provides information on how the operation executed. + The table service properties as a object. + + + + Begins an asynchronous operation to set the properties of the table service. + + The table service properties. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Begins an asynchronous operation to set the properties of the table service. + + The table service properties. + A object that specifies any additional options for the request. + An object that provides information on how the operation executed. + The callback delegate that will receive notification when the asynchronous operation completes. + A user defined object to be passed to the callback delegate. + An that references the asynchronous operation. + + + + Ends an asynchronous operation to set the properties of the table service. + + The result returned from a prior call to + + + + Sets the properties of the table service. + + The table service properties. + A object that specifies any additional options for the request. + An object that provides information on how the operation executed. + + + + Creates a new object for performing operations against the Table service. + + A service context to use for performing operations against the Table service. + + + + The default server and client timeout interval. + + + + + Max execution time across all potential retries. + + + + + Initializes a new instance of the class using the specified Blob service endpoint + and anonymous credentials. + + The Blob service endpoint to use to create the client. + + + + Initializes a new instance of the class using the specified Blob service endpoint + and account credentials. + + The Blob service endpoint to use to create the client. + The account credentials. + + + + Initializes a new instance of the class. + + True to use path style Uris. + The Blob service endpoint to use to create the client. + The account credentials. + + + + Gets a reference to the table at the specified address. + + Either the name of the table, or the absolute URI to the table. + A reference to the table. + + + + Gets or sets the authentication scheme to use to sign HTTP requests. + + Note that if you are using the legacy Table service API, which is based on WCF Data Services, the authentication scheme used by the TableServiceContext object will always be Shared Key Lite, regardless of the value of this property. + + + + Gets the authentication handler used to sign HTTP requests. + + The authentication handler. + + + + Gets the account credentials used to create the Blob service client. + + The account credentials. + + + + Gets the base URI for the Blob service client. + + The base URI used to construct the Blob service client. + + + + Gets or sets the default retry policy for requests made via the Blob service client. + + The retry policy. + + + + Gets or sets the default server and client timeout for requests. + + The server and client timeout interval. + + + + Gets or sets the maximum execution time across all potential retries. + + The maximum execution time across all potential retries. + + + + Gets a value indicating whether the service client is used with Path style or Host style. + + Is true if use path style URIs; otherwise, false. + + + + Represents a query against a specified table. + + The class aggregates and encodes the query parameters to pass with the request when the query is executed. + To execute the query, call the executeQuery or executeQuerySegmented method of the class. + + + + Represents a query against a specified table. + + A instance aggregates the query parameters to use when the query is executed. One of the executeQuery or executeQuerySegmented methods + of must be called to execute the query. The parameters are encoded and passed to the server when the table query is executed. + + + + Generates a property filter condition string for the string value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A string containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the boolean value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A bool containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the binary value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A byte array containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value, formatted as the specified . + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A string containing the value to compare with the property. + The to format the value as. + A string containing the formatted filter condition. + + + + Creates a filter condition using the specified logical operator on two filter conditions. + + A string containing the first formatted filter condition. + A string containing Operators.AND or Operators.OR. + A string containing the second formatted filter condition. + A string containing the combined filter expression. + + + + Defines the property names of the table entity properties to return when the table query is executed. + + The select clause is optional on a table query, used to limit the table properties returned from the server. By default, a query will return all properties from the table entity. + A list of string objects containing the property names of the table entity properties to return when the query is executed. + A instance set with the table entity properties to return. + + + + Defines the upper bound for the number of entities the query returns. + + The maximum number of entities for the table query to return. + A instance set with the number of entities to return. + + + + Defines a filter expression for the table query. Only entities that satisfy the specified filter expression will be returned by the query. + + Setting a filter expression is optional; by default, all entities in the table are returned if no filter expression is specified in the table query. + A string containing the filter expression to apply to the table query. + A instance set with the filter on entities to return. + + + + Gets or sets the number of entities the table query will return. + + The maximum number of entities for the table query to return. + + + + Gets or sets the filter expression to use in the table query. + + A string containing the filter expression to use in the query. + + + + Gets or sets the property names of the table entity properties to return when the table query is executed. + + A list of strings containing the property names of the table entity properties to return when the query is executed. + + + + Gets the table continuation from response. + + The response. + The continuation. + + + + Represents a batch operation on a table. + + + Represents a batch operation on a table. + + A batch operation is a collection of table operations which are executed by the Storage Service REST API as a single atomic operation, by invoking an + Entity Group Transaction.A batch operation may contain up to 100 individual + table operations, with the requirement that each operation entity must have same partition key. A batch with a retrieve operation cannot contain any other operations. + Note that the total payload of a batch operation is limited to 4MB. + + + + Inserts a into the batch that retrieves an entity based on its row key and partition key. The entity will be deserialzed into the specified class type which extends . + + The class of type for the entity to retrieve. + A string containing the partition key of the entity to retrieve. + A string containing the row key of the entity to retrieve. + + + + Adds a table operation to retrieve an entity of the specified class type with the specified partition key and row key to the batch operation. + + The return type which the specified will resolve the given entity to. + A string containing the partition key of the entity to retrieve. + A string containing the row key of the entity to retrieve. + The implementation to project the entity to retrieve as a particular type in the result. + + + + Initializes a new instance of the class. + + + + + Adds a to the that deletes the specified entity from a table. + + The entity to be deleted from the table. + + + + Adds a to the that inserts the specified entity into a table. + + The entity to be inserted into the table. + + + + Adds a to the that inserts the specified entity into a table if the entity does not exist; if the entity does exist then its contents are merged with the provided entity. + + The entity whose contents are being inserted or merged. + + + + Adds a to the that inserts the specified entity into a table if the entity does not exist; if the entity does exist then its contents are replaced with the provided entity. + + The entity whose contents are being inserted or replaced. + + + + Adds a to the that merges the contents of the specified entity with the existing entity in a table. + + The entity whose contents are being merged. + + + + Adds a to the that replaces the contents of the specified entity in a table. + + The entity whose contents are being replaced. + + + + CAdds a to the that retrieves an entity with the specified partition key and row key. + + A string containing the partition key of the entity to retrieve. + A string containing the row key of the entity to retrieve. + + + + Returns the zero-based index of the first occurrence of the specified item, or -1 if the does not contain the item. + + The item to search for. + The zero-based index of the first occurrence of item within the , if found; otherwise, –1. + + + + Inserts a into the at the specified index. + + The index at which to insert the . + The item to insert. + + + + Removes the at the specified index from the . + + The index of the to remove from the . + + + + Adds the to the . + + The item to add to the . + + + + Clears all objects from the . + + + + + Returns true if this contains the specified element. + + The item to search for. + true if the item is contained in the ; false, otherwise. + + + + Copies all the elements of the to the specified one-dimensional array starting at the specified destination array index. + + The one-dimensional array that is the destination of the elements copied from the . + The index in the destination array at which copying begins. + + + + Removes the specified item from the . + + The item to remove. + true if the item was successfully removed; false, otherwise. + + + + Returns an for the . + + An enumerable collection of items. + + + + Returns an . + + An for the . + + + + Gets or sets the item at the specified index. + + The index at which to get or set the TableOperation. + The item at the specified index. + + + + Gets the number of operations in this . + + The number of operations in the . + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; false, otherwise. + + + + Represents a single table operation. + + + Represents a single table operation. + + + + + Creates a new table operation that replaces the contents of + the given entity in a table. + + The class of type for the entity to retrieve. + A string containing the partition key of the entity to retrieve. + A string containing the row key of the entity to retrieve. + The table operation. + + + + Creates a new table operation that replaces the contents of + the given entity in a table. + + The return type which the specified will resolve the given entity to. + A string containing the partition key of the entity to retrieve. + A string containing the row key of the entity to retrieve. + The implementation to project the entity to retrieve as a particular type in the result. + The table operation. + + + + Creates a new instance of the TableOperation class given the + entity to operate on and the type of operation that is being + performed. + + The entity that is being operated upon. + The type of operation. + + + + Creates a new table operation that deletes the given entity + from a table. + + The entity to be deleted from the table. + The table operation. + + + + Creates a new table operation that inserts the given entity + into a table. + + The entity to be inserted into the table. + The table operation. + + + + Creates a new table operation that inserts the given entity + into a table if the entity does not exist; if the entity does + exist then its contents are merged with the provided entity. + + The entity whose contents are being inserted + or merged. + The table operation. + + + + Creates a new table operation that inserts the given entity + into a table if the entity does not exist; if the entity does + exist then its contents are replaced with the provided entity. + + The entity whose contents are being inserted + or replaced. + The table operation. + + + + Creates a new table operation that merges the contents of + the given entity with the existing entity in a table. + + The entity whose contents are being merged. + The table operation. + + + + Creates a new table operation that replaces the contents of + the given entity in a table. + + The entity whose contents are being replaced. + The table operation. + + + + Creates a new table operation that replaces the contents of + the given entity in a table. + + The partition key of the entity to be replaced. + The row key of the entity to be replaced. + The table operation. + + + + Gets the entity that is being operated upon. + + + + + Gets the type of operation. + + + + + Represents a query against a specified table. + + A class which implements . + + Represents a query against a specified table. + + + + + Initializes a new instance of the class. + + + + + Generates a property filter condition string for the string value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A string containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the boolean value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A bool containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the binary value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A byte array containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value. + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A containing the value to compare with the property. + A string containing the formatted filter condition. + + + + Generates a property filter condition string for the value, formatted as the specified . + + A string containing the name of the property to compare. + A string containing the comparison operator to use. + A string containing the value to compare with the property. + The to format the value as. + A string containing the formatted filter condition. + + + + Creates a filter condition using the specified logical operator on two filter conditions. + + A string containing the first formatted filter condition. + A string containing Operators.AND or Operators.OR. + A string containing the second formatted filter condition. + A string containing the combined filter expression. + + + + Defines the property names of the table entity properties to return when the table query is executed. + + The select clause is optional on a table query, used to limit the table properties returned from the server. By default, a query will return all properties from the table entity. + A list of string objects containing the property names of the table entity properties to return when the query is executed. + A instance set with the table entity properties to return. + + + + Defines the upper bound for the number of entities the query returns. + + The maximum number of entities for the table query to return. + A instance set with the number of entities to return. + + + + Defines a filter expression for the table query. Only entities that satisfy the specified filter expression will be returned by the query. + + Setting a filter expression is optional; by default, all entities in the table are returned if no filter expression is specified in the table query. + A string containing the filter expression to apply to the table query. + A instance set with the filter on entities to return. + + + + Gets or sets the number of entities the query returns specified in the table query. + + The maximum number of entities for the table query to return. + + + + Gets or sets the filter expression to use in the table query. + + A string containing the filter expression to use in the query. + + + + Gets or sets the property names of the table entity properties to return when the table query is executed. + + A list of strings containing the property names of the table entity properties to return when the query is executed. + + + + Represents a set of access conditions to be used for operations against the storage services. + + + + + Time for IfModifiedSince. + + + + + Time for IfUnmodifiedSince. + + + + + Constructs an empty access condition. + + An empty access condition. + + + + Constructs an access condition such that an operation will be performed only if the resource's ETag value + matches the specified ETag value. + + The ETag value that must be matched. + An AccessCondition object that represents the If-Match condition. + + + + Constructs an access condition such that an operation will be performed only if the resource has been + modified since the specified time. + + The time that must be before the last modified time of the resource. + An AccessCondition object that represents the If-Modified-Since condition. + + + + Constructs an access condition such that an operation will be performed only if the resource's ETag value + does not match the specified ETag value. + + The ETag value that must be matched, or "*". + An AccessCondition object that represents the If-None-Match condition. + + If "*" is specified as the parameter then this condition requires that the resource does not exist. + + + + + Constructs an access condition such that an operation will be performed only if the resource has not been + modified since the specified time. + + The time that must not be before the last modified time of the resource. + An AccessCondition object that represents the If-Unmodified-Since condition. + + + + Constructs an access condition such that an operation will be performed only if the lease ID on the + resource matches the specified lease ID. + + The lease ID that must match the lease ID of the resource. + An AccessCondition object that represents the lease condition. + + + + Gets or sets an "etag" that must match the ETag of a resource. + + A quoted ETag string. If null, no condition exists. + + + + Gets or sets an ETag that must not match the ETag of a resource. + + A quoted ETag string, or "*" to match any ETag. If null, no condition exists. + + + + Gets or sets a time that must be before the last modification of a resource. + + A DateTimeOffset in UTC, or null if no condition exists. + + + + Gets or sets a time that must not be before the last modification of a resource. + + A DateTimeOffset in UTC, or null if no condition exists. + + + + Gets or sets a lease ID that must match the lease on a resource. + + A lease ID, or null if no condition exists. + + + + Determines whether the access condition is one of the four conditional headers. + + true if the access condition is a conditional header; otherwise, false. + + + + Specifies the authentication scheme used to sign HTTP requests. + + + + + Signs HTTP requests using the Shared Key Lite authentication scheme. + + + + + Signs HTTP requests using the Shared Key authentication scheme. + + + + + Represents a Windows Azure Storage account. + + + + + The setting name for using the development storage. + + + + + The setting name for specifying a development storage proxy Uri. + + + + + The setting name for using the default storage endpoints with the specified protocol. + + + + + The setting name for the account name. + + + + + The setting name for the account key name. + + + + + The setting name for the account key. + + + + + The setting name for a custom blob storage endpoint. + + + + + The setting name for a custom queue endpoint. + + + + + The setting name for a custom table storage endpoint. + + + + + The setting name for a shared access key. + + + + + The default account name for the development storage. + + + + + The default account key for the development storage. + + + + + The credentials string used to test for the development storage credentials. + + + + + The root blob storage DNS name. + + + + + The root queue DNS name. + + + + + The root table storage DNS name. + + + + + The Fisma compliance default value. + + + + + Validator for the UseDevelopmentStorage setting. Must be "true". + + + + + Validator for the DevelopmentStorageProxyUri setting. Must be a valid Uri. + + + + + Validator for the DefaultEndpointsProtocol setting. Must be either "http" or "https". + + + + + Validator for the AccountName setting. No restrictions. + + + + + Validator for the AccountKey setting. No restrictions. + + + + + Validator for the AccountKey setting. Must be a valid base64 string. + + + + + Validator for the BlobEndpoint setting. Must be a valid Uri. + + + + + Validator for the QueueEndpoint setting. Must be a valid Uri. + + + + + Validator for the TableEndpoint setting. Must be a valid Uri. + + + + + Validator for the SharedAccessSignature setting. No restrictions. + + + + + Singleton instance for the development storage account. + + + + + Initializes a new instance of the class using the specified + account credentials and service endpoints. + + The account credentials. + The Blob service endpoint. + The Queue service endpoint. + The Table service endpoint. + + + + Initializes a new instance of the class using the specified + account credentials and the default service endpoints. + + An object of type that + specifies the account name and account key for the storage account. + True to use HTTPS to connect to storage service endpoints; otherwise, false. + + + + Parses a connection string and returns a created + from the connection string. + + A valid connection string. + Thrown if is null or empty. + Thrown if is not a valid connection string. + Thrown if cannot be parsed. + A object constructed from the values provided in the connection string. + + + + Indicates whether a connection string can be parsed to return a object. + + The connection string to parse. + A object to hold the instance returned if + the connection string can be parsed. + true if the connection string was successfully parsed; otherwise, false. + + + + Creates the Table service client. + + A client object that specifies the Table service endpoint. + + + + Creates the Queue service client. + + A client object that specifies the Queue service endpoint. + + + + Creates the Blob service client. + + A client object that specifies the Blob service endpoint. + + + + Returns a connection string for this storage account, without sensitive data. + + A connection string. + + + + Returns a connection string for the storage account, optionally with sensitive data. + + True to include sensitive data in the string; otherwise, false. + A connection string. + + + + Returns a with development storage credentials using the specified proxy Uri. + + The proxy endpoint to use. + The new . + + + + Internal implementation of Parse/TryParse. + + The string to parse. + The to return. + A callback for reporting errors. + If true, the parse was successful. Otherwise, false. + + + + Tokenizes input and stores name value pairs. + + The string to parse. + Error reporting delegate. + Tokenized collection. + + + + Encapsulates a validation rule for an enumeration based account setting. + + The name of the setting. + A list of valid values for the setting. + An representing the enumeration constraint. + + + + Encapsulates a validation rule using a func. + + The name of the setting. + A func that determines if the value is valid. + An representing the constraint. + + + + Determines whether the specified setting value is a valid base64 string. + + The setting value. + true if the specified setting value is a valid base64 string; otherwise, false. + + + + Validation function that validates Uris. + + Value to validate. + true if the specified setting value is a valid Uri; otherwise, false. + + + + Settings filter that requires all specified settings be present and valid. + + A list of settings that must be present. + The remaining settings or null if the filter's requirement is not satisfied. + + + + Settings filter that removes optional values. + + A list of settings that are optional. + The remaining settings or null if the filter's requirement is not satisfied. + + + + Settings filter that ensures that at least one setting is present. + + A list of settings of which one must be present. + The remaining settings or null if the filter's requirement is not satisfied. + + + + Settings filter that ensures that a valid combination of credentials is present. + + The remaining settings or null if the filter's requirement is not satisfied. + + + + Tests to see if a given list of settings matches a set of filters exactly. + + The settings to check. + A list of filters to check. + + If any filter returns null, false. + If there are any settings left over after all filters are processed, false. + Otherwise true. + + + + + Gets a StorageCredentials object corresponding to whatever credentials are supplied in the given settings. + + The settings to check. + The StorageCredentials object specified in the settings. + + + + Gets the default blob endpoint using specified settings. + + The settings to use. + The default blob endpoint. + + + + Gets the default blob endpoint using the specified protocol and account name. + + The protocol to use. + The name of the storage account. + The default blob endpoint. + + + + Gets the default queue endpoint using the specified settings. + + The settings. + The default queue endpoint. + + + + Gets the default queue endpoint using the specified protocol and account name. + + The protocol to use. + The name of the storage account. + The default queue endpoint. + + + + Gets the default table endpoint using the specified settings. + + The settings. + The default table endpoint. + + + + Gets the default table endpoint using the specified protocol and account name. + + The protocol to use. + The name of the storage account. + The default table endpoint. + + + + Gets or sets a value indicating whether the Fisma MD5 setting will be used. + + false to use the Fisma MD5 setting; true to use the .Net default implementation. + + + + Gets a object that references the development storage account. + + A reference to the development storage account. + + + + Gets the endpoint for the Blob service, as configured for the storage account. + + The Blob service endpoint. + + + + Gets the endpoint for the Queue service, as configured for the storage account. + + The Queue service endpoint. + + + + Gets the endpoint for the Table service, as configured for the storage account. + + The Table service endpoint. + + + + Gets the credentials used to create this object. + + The credentials used to create the object. + + + + Specifies that the method will make one or more requests to the storage service. + + + + + An interface required for continuation token types. + + The , , and classes implement the interface. + + + + An interface required for request option types. + + The , , and classes implement the interface. + + + + Gets or sets the retry policy for the request. + + The retry policy delegate. + + + + Gets or sets the server timeout for the request. + + The client and server timeout interval for the request. + + + + Gets or sets the maximum execution time across all potential retries. + + The maximum execution time across all potential retries. + + + + Represents the context for a request to the storage service and provides additional runtime information about its execution. + + + + + Gets or sets additional headers, for example proxy or logging information. + + A object containing additional header information. + + + + Gets or sets the client request ID. + + The client request ID. + + + + Occurs immediately before a request is signed. + + + + + Occurs when a response is received from the server. + + + + + Gets or sets the start time of the operation. + + The start time of the operation. + + + + Gets or sets the end time of the operation. + + The end time of the operation. + + + + Gets or sets the set of request results that the current operation has created. + + An object that contains objects that represent the request results created by the current operation. + + + + Gets the last request result encountered for the operation. + + A object that represents the last request result. + + + + Provides information and event data that is associated with a request event. + + + + + Initializes a new instance of the class by using the specified parameter. + + The object. + + + + Gets the request information associated with this event. + + The request information associated with this event. + + + + Gets the HTTP request associated with this event. + + The HTTP request associated with this event. + + + + Gets the HTTP response associated with this event. + + The HTTP response associated with this event. + + + + Represents the result of a physical request. + + + + + Translates the specified message into a object. + + The message to translate. + The translated . + + + + Generates a serializable RequestResult from its XML representation. + + The stream from which the RequestResult is deserialized. + + + + Converts a serializable RequestResult object into its XML representation. + + The stream to which the RequestResult is serialized. + + + + Gets or sets the HTTP status code for the request. + + The HTTP status code for the request. + + + + Gets the HTTP status message for the request. + + The HTTP status message for the request. + + + + Gets the service request ID for this request. + + The service request ID for this request. + + + + Gets the content-MD5 value for the request. + + The content-MD5 value for the request. + + + + Gets the ETag value of the request. + + The ETag value of the request. + + + + Gets the request date. + + The request date. + + + + Gets the extended error information. + + The extended error information. + + + + Gets or sets the exception. + + The exception. + + + + Gets the start time of the operation. + + The start time of the operation. + + + + Gets the end time of the operation. + + The end time of the operation. + + + + Represents a result segment that was retrieved from the total set of possible results. + + The type of the element. + + + + Stores the continuation token used to retrieve the next segment of results. + + + + + Initializes a new instance of the ResultSegment class. + + The result. + + + + Gets an enumerable collection of results. + + An enumerable collection of results. + + + + Gets a continuation token to use to retrieve the next set of results with a subsequent call to the operation. + + The continuation token. + + + + Represents an exception for the Windows Azure storage service. + + + + + Initializes a new instance of the class by using the specified parameters. + + The request result. + The message. + The inner exception. + + + + Initializes a new instance of the class with serialized data. + + The that contains contextual information about the source or destination. + The object that holds the serialized object data for the exception being thrown. + This constructor is called during deserialization to reconstitute the exception object transmitted over a stream. + + + + Populates a object with the data needed to serialize the target object. + + The destination context for this serialization. + The object to populate with data. + + + + Translates the specified exception into a storage exception. + + The exception to translate. + The request result. + The storage exception. + + + + Represents an exception thrown by the Windows Azure storage client library. + + A string that represents the exception. + + + + Gets the object for this object. + + The object for this object. + + + + Represents extended error information returned by the Windows Azure storage services. + + + + + Initializes a new instance of the class. + + + + + Gets the error details from stream. + + The input stream. + The error details. + + + + Generates a serializable StorageExtendedErrorInformation from its XML representation. + + The stream from which the StorageExtendedErrorInformation is deserialized. + + + + Converts a serializable StorageExtendedErrorInformation object into its XML representation. + + The stream to which the StorageExtendedErrorInformation is serialized. + + + + Gets the storage service error code. + + The storage service error code. + + + + Gets the storage service error message. + + The storage service error message. + + + + Gets additional error details. + + The additional error details. + + + + Represents a set of credentials used to authenticate access to a Windows Azure storage account. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified account name and key value. + + A string that represents the name of the storage account. + A string that represents the Base-64-encoded account access key. + + + + Initializes a new instance of the class with the specified account name and key value. + + A string that represents the name of the storage account. + An array of bytes that represent the account access key. + + + + Initializes a new instance of the class with the specified account name, key value, and key name. + + A string that represents the name of the storage account. + A string that represents the Base-64-encoded account access key. + A string that represents the name of the key. + + + + Initializes a new instance of the class with the specified account name, key value, and key name. + + A string that represents the name of the storage account. + An array of bytes that represent the account access key. + A string that represents the name of the key. + + + + Initializes a new instance of the class with the specified shared access signature token. + + A string representing the shared access signature token. + + + + Updates the key value and key name for the credentials. + + The key value, as a Base-64 encoded string, to update. + The key name to update. + + + + Updates the key value and key name for the credentials. + + The key value, as an array of bytes, to update. + The key name to update. + + + + Returns the key for the credentials. + + An array of bytes that contains the key. + + + + Transforms a resource URI into a shared access signature URI, by appending a shared access token. + + A object that represents the resource URI to be transformed. + A object that represents the signature, including the resource URI and the shared access token. + + + + Determines whether an other object is equal to this one by comparing their SAS tokens, account names, key names, and key values. + + The object to compare to this one. + true if the two objects are equal; otherwise, false. + + + + Gets the associated shared access signature token for the credentials. + + The shared access signature token. + + + + Gets the associated account name for the credentials. + + The account name. + + + + Gets the associated key name for the credentials. + + The key name. + + + + Gets a value indicating whether the credentials are for anonymous access. + + true if the credentials are for anonymous access; otherwise, false. + + + + Gets a value indicating whether the credentials are a shared access signature token. + + true if the credentials are a shared access signature token; otherwise, false. + + + + Gets a value indicating whether the credentials are a shared key. + + true if the credentials are a shared key; otherwise, false. + + + + Represents a canonicalized string used in authenticating a request against the azure service. + + + + + Stores the internal that holds the canonicalized string. + + + + + Initializes a new instance of the class. + + The first canonicalized element to start the string with. + + + + Initializes a new instance of the class. + + The first canonicalized element to start the string with. + The starting size of the string. + + + + Append additional canonicalized element to the string. + + An additional canonicalized element to append to the string. + + + + Converts the value of this instance to a string. + + A string whose value is the same as this instance. + + + + A NullTaskReturn type. + + + + + Represents a no-return from a task. + + + + + Prevents a default instance of the class from being created. + + + + + Provides a standard set of errors that could be thrown from the client library. + + + + + A convenience class for constructing URI query strings. + + + + + Stores the query parameters. + + + + + Add the value with URI escaping. + + The query name. + The query value. + + + + Returns a containing the URI. + + + A containing the URI. + + + + + Add a query parameter to a URI. + + The original URI, including any existing query parameters. + The URI with the new query parameter appended. + + + + Contains helper methods for implementing shared access signatures. + + + + + Get the complete query builder for creating the Shared Access Signature query. + + The shared access policy to hash. + An optional identifier for the policy. + Either "b" for blobs or "c" for containers. + The signature to use. + The name of the key used to create the signature, or null if the key is implicit. + The finished query builder. + + + + Get the complete query builder for creating the Shared Access Signature query. + + The shared access policy to hash. + An optional identifier for the policy. + The signature to use. + The name of the key used to create the signature, or null if the key is implicit. + The finished query builder. + + + + Get the complete query builder for creating the Shared Access Signature query. + + The shared access policy to hash. + The name of the table associated with this shared access signature. + An optional identifier for the policy. + The start partition key, or null. + The start row key, or null. + The end partition key, or null. + The end row key, or null. + The signature to use. + The name of the key used to create the signature, or null if the key is implicit. + The finished query builder. + + + + Converts the specified value to either a string representation or . + + The value to convert. + A string representing the specified value. + + + + Converts the specified value to either a string representation or null. + + The value to convert. + A string representing the specified value. + + + + Escapes and adds the specified name/value pair to the query builder if it is not null. + + The builder to add the value to. + The name of the pair. + The value to be escaped. + + + + Parses the query. + + The query parameters. + + + + Get the complete query builder for creating the Shared Access Signature query. + + The permissions string for the resource, or null. + The start time, or null. + The expiration time, or null. + The start partition key, or null. + The start row key, or null. + The end partition key, or null. + The end row key, or null. + An optional identifier for the policy. + Either "b" for blobs or "c" for containers, or null if neither. + The name of the table this signature is associated with, + or null if not using table SAS. + The signature to use. + The name of the key used to create the signature, or null if the key is implicit. + The finished query builder. + + + + Get the signature hash embedded inside the Shared Access Signature. + + The shared access policy to hash. + An optional identifier for the policy. + The canonical resource string, unescaped. + Credentials to be used for signing. + The signed hash. + + + + Get the signature hash embedded inside the Shared Access Signature. + + The shared access policy to hash. + An optional identifier for the policy. + The canonical resource string, unescaped. + Credentials to be used for signing. + The signed hash. + + + + Get the signature hash embedded inside the Shared Access Signature. + + The shared access policy to hash. + An optional identifier for the policy. + The start partition key, or null. + The start row key, or null. + The end partition key, or null. + The end row key, or null. + The canonical resource string, unescaped. + Credentials to be used for signing. + The signed hash. + + + + Get the signature hash embedded inside the Shared Access Signature. + + The permissions string for the resource, or null. + The start time, or null. + The expiration time, or null. + The start partition key, or null. + The start row key, or null. + The end partition key, or null. + The end row key, or null. + Whether to use the table string-to-sign. + An optional identifier for the policy. + The canonical resource string, unescaped. + The credentials to be used for signing. + The signed hash. + + + + Apply timeout options to StorageCommandBase + + Return value type of StorageCommandBase + The options. + An instance of StorageCommandBase to apply options to + + + + Apply timeout options to StorageCommandBase + + Return value type of StorageCommandBase + The options. + An instance of StorageCommandBase to apply options to + + + + Apply timeout options to StorageCommandBase + + Return value type of StorageCommandBase + The request options. + An instance of StorageCommandBase to apply options to + + + + Gets the value of the x-ms-date or Date header. + + The request where the value is read from. + The value of the x-ms-date or Date header. + + + + Appends the value of the Content-Length header to the specified canonicalized string. + + The canonicalized string where the value is appended. + The request where the value is read from. + + + + Appends the value of the Date header (or, optionally, the x-ms-date header) to the specified canonicalized string. + + The canonicalized string where the value is appended. + The request where the value is read from. + true if the value of the x-ms-date header can be used and is preferred; otherwise, false. + + + + Appends the values of the x-ms-* headers to the specified canonicalized string. + + The canonicalized string where the values are appended. + The request where the values are read from. + + + + Gets the canonicalized header value to use for the specified date/time or null if it does not have a value. + + The date/time. + The canonicalized header value to use for the specified date/time or null if it does not have a value. + + + + Gets the canonicalized resource string for the specified URI. + + The resource URI. + The name of the storage account. + true when using the Shared Key Lite authentication scheme or the table service; otherwise, false. + The canonicalized resource string. + + + + Gets the first header value or null if no header values exist. + + The type of header objects contained in the enumerable. + An enumerable that contains header values. + The first header value or null if no header values exist. + + + + Throws an exception if the string is empty or null. + + The name of the parameter. + The value of the parameter. + Thrown if value is empty. + Thrown if value is null. + + + + Throw an exception if the value is null. + + The name of the parameter. + The value of the parameter. + Thrown if value is null. + + + + Throw an exception indicating argument is out of range. + + The name of the parameter. + The value of the parameter. + + + + Throw an exception if the argument is out of bounds. + + The type of the value. + The name of the parameter. + The value of the parameter. + The minimum value for the parameter. + The maximum value for the parameter. + + + + Checks that the given timeout in within allowed bounds. + + The timeout to check. + The timeout is not within allowed bounds. + + + + Combines AssertNotNullOrEmpty and AssertInBounds for convenience. + + The name of the parameter. + Turns on or off null/empty checking. + The value of the parameter. + The maximum size of value. + + + + Rounds up to seconds. + + The time span. + The time rounded to seconds. + + + + Determines if a URI requires path style addressing. + + The URI to check. + Returns true if the Uri uses path style addressing; otherwise, false. + + + + Applies the request optimizations such as disabling buffering and 100 continue. + + The request to be modified. + The length of the content, -1 if the content length is not settable. + + + + General class that provides helper methods for XML processing and lazy execution of segmented results. + + + + + Read the value of an element in the XML. + + The name of the element whose value is retrieved. + A reader that provides access to XML data. + A string representation of the element's value. + + + + Returns an enumerable collection of results that is retrieved lazily. + + The type of ResultSegment like Blob, Container, Queue and Table. + The segment generator. + >A non-negative integer value that indicates the maximum number of results to be returned + in the result segment, up to the per-operation limit of 5000. + An object that represents the context for the current operation. + + + + + Provides helper functions for http request/response processing. + + + + + Parse the http query string. + + Http query string. + + + + + Parse the http query string. + + Http query string. + Character encoding. + + + + + Converts the DateTimeOffset object to an Http string of form: Sun, 28 Jan 2008 12:11:37 GMT. + + The DateTimeOffset object to convert to an Http string. + String of form: Sun, 28 Jan 2008 12:11:37 GMT. + + + + Combine all the header values int he IEnumerable to a single comma separated string. + + An IEnumerable object representing the header values. + A comma separated string of header values. + + + + Try to get the value of the specified header name. + + The Http web response from which to get the header value. + The name of the header whose value is to be retrieved. + The default value for the header that is returned if we can't get the actual header value. + A string representing the header value. + + + + Wrapper class for MD5. + + + + + Calculates an on-going hash using the input byte array. + + The input array used for calculating the hash. + The offset in the input buffer to calculate from. + The number of bytes to use from input. + + + + Retrieves the string representation of the hash. (Completes the creation of the hash). + + A byte array that is the content of the hash. + + + + Computes the hash value of the specified MemoryStream. + + The memory stream to calculate hash on. + The computed hash value string. + + + + Contains methods for dealing with navigation. + + + + + The name of the root container. + + + + + Used in address parsing. + + + + + Used in address parsing. + + + + + Used in address parsing. + + + + + Used to split string on slash. + + + + + Used to split hostname. + + + + + Retrieves the container part of a storage Uri, or "$root" if the container is implicit. + + The blob address. + If set to true use path style Uris. + Name of the container. + + The trailing slash is always removed. + + GetContainerName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob")) will return "mycontainer" + GetConatinerName(new Uri("http://test.blob.core.windows.net/mycontainer/")) will return "mycontainer" + GetConatinerName(new Uri("http://test.blob.core.windows.net/myblob")) will return "$root" + GetConatinerName(new Uri("http://test.blob.core.windows.net/")) will throw ArgumentException + + + + + + Retrieves the blob part of a storage Uri. + + The blob address. + If set to true use path style Uris. + The name of the blob. + + + + Retreives the complete container address from a storage Uri + Example GetContainerAddress(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob")) + will return http://test.blob.core.windows.net/mycontainer. + + The blob address. + True to use path style Uris. + Uri of the container. + + + + Retreives the parent name from a storage Uri. + + The blob address. + The delimiter. + If set to true use path style Uris. + The name of the parent. + + Adds the trailing delimiter as the prefix returned by the storage REST api always contains the delimiter. + + + GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob", "/")) will return "/mycontainer/myfolder/" + GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder|myblob", "|") will return "/mycontainer/myfolder|" + GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myblob", "/") will return "/mycontainer/" + GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/", "/") will return "/mycontainer/" + + + + + Retrieves the parent address for a blob Uri. + + The blob address. + The delimiter. + If set to true use path style Uris. + The address of the parent. + + GetParentName(new Uri("http://test.blob.core.windows.net/mycontainer/myfolder/myblob", null)) + will return "http://test.blob.core.windows.net/mycontainer/myfolder/" + + + + + Gets the service client base address. + + The address Uri. + The use path style Uris. + The base address of the client. + + GetServiceClientBaseAddress("http://testaccount.blob.core.windows.net/testconatiner/blob1") + returns "http://testaccount.blob.core.windows.net" + + + + + Appends a path to a URI correctly using "/" as separator. + + The base URI. + The relative or absolute URI. + The appended Uri. + + AppendPathToUri(new Uri("http://test.blob.core.windows.net/test", "abc") + will return "http://test.blob.core.windows.net/test/abc" + AppendPathToUri(new Uri("http://test.blob.core.windows.net/test"), "http://test.blob.core.windows.net/test/abc") + will return "http://test.blob.core.windows.net/test/abc" + + + + + Append a relative path to a URI, handling traling slashes appropiately. + + The base URI. + The relative or absloute URI. + The seperator. + The appended Uri. + + + + Get container name from address for styles of paths + Eg: http://test.blob.core.windows.net/container/blob => container + http://127.0.0.1:10000/test/container/blob => container. + + The container Uri. + If set to true use path style Uris. + The container name. + + + + Gets the canonical path from creds. + + The credentials. + The absolute path. + The canonical path. + + + + Similar to getting container name from Uri. + + The queue Uri. + If set to true use path style Uris. + The queue name. + + + + Extracts a table name from the table's Uri. + + The queue Uri. + If set to true use path style Uris. + The queue name. + + + + Retrieve the container address and address. + + The blob address. + True to use path style Uris. + Name of the container. + The container URI. + + + + Retrieve the container name and the blob name from a blob address. + + The blob address. + If set to true use path style Uris. + The resulting container name. + The resulting blob name. + + + + Parses the snapshot time. + + The snapshot time. + The parsed snapshot time. + + + + Parse Uri for SAS (Shared access signature) information. + + The complete Uri. + The credentials to use. + The parsed snapshot. + It returns the blob URI with no credentials and no snapshot info + address + + Validate that no other query parameters are passed in. + Any SAS information will be recorded as corresponding credentials instance. + If credentials is passed in and it does not match the SAS information found, an + exception will be thrown. + Otherwise a new client is created based on SAS information or as anonymous credentials. + + + + + Provides properties to keep track of Md5 / Length of a stream as it is being copied. + + + + + Provides stream helper methods that allow us to copy streams and measure the stream size. + + + + + Reads synchronously the entire content of the stream and writes it to the given output stream. + + The origin stream. + The destination stream. + Maximum length of the stream to write. + DateTime indicating the expiry time. + Bool value indicating whether the Md5 should be calculated. + A boolean indicating whether the write happens synchronously. + An object that represents the context for the current operation. + State of the stream copy. + stream + + + + Reads synchronously the entire content of the stream and writes it to the given output stream. + + + The origin stream. + The destination stream. + Maximum length of the stream to write. + DateTime indicating the expiry time. + Bool value indicating whether the Md5 should be calculated. + StorageCommand that stores state about its execution. + An object that represents the context for the current operation. + State of the stream copy. + The action taken when the execution is completed. + + + + Represents a retry policy that performs a specified number of retries, using a randomized exponential backoff scheme to determine the interval between retries. + + + + + Represents a retry policy. + + + + + Generates a new retry policy for the current request attempt. + + An object that represents the retry policy for the current request attempt. + + + + Determines if the operation should be retried and how long to wait until the next retry. + + The number of retries for the given operation. A value of zero signifies this is the first error encountered. + The status code for the last operation. + An object that represents the last exception encountered. + The interval to wait until the next retry. + An object for tracking the current operation. + true if the operation should be retried; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the specified delta and maximum number of retries. + + The backoff interval between retries. + The maximum number of retry attempts. + + + + Determines if the operation should be retried and how long to wait until the next retry. + + The number of retries for the given operation. A value of zero signifies this is the first error encountered. + The status code for the last operation. + An object that represents the last exception encountered. + The interval to wait until the next retry. + An object for tracking the current operation. + true if the operation should be retried; otherwise, false. + + + + Generates a new retry policy for the current request attempt. + + An object that represents the retry policy for the current request attempt. + + + + Represents a retry policy that performs a specified number of retries, using a specified fixed time interval between retries. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class using the specified delta and maximum number of retries. + + The backoff interval between retries. + The maximum number of retry attempts. + + + + Determines if the operation should be retried and how long to wait until the next retry. + + The number of retries for the given operation. A value of zero signifies this is the first error encountered. + The status code for the last operation. + An object that represents the last exception encountered. + The interval to wait until the next retry. + An object for tracking the current operation. + true if the operation should be retried; otherwise, false. + + + + Generates a new retry policy for the current request attempt. + + An object that represents the retry policy for the current request attempt. + + + + Represents a retry policy that performs no retries. + + + + + Initializes a new instance of the class. + + + + + Determines if the operation should be retried and how long to wait until the next retry. + + The number of retries for the given operation. A value of zero signifies this is the first error encountered. + The status code for the last operation. + An object that represents the last exception encountered. + The interval to wait until the next retry. + An object for tracking the current operation. + true if the operation should be retried; otherwise, false. + + + + Generates a new retry policy for the current request attempt. + + An object that represents the retry policy for the current request attempt. + + + + Verifies that the blob is not a snapshot. + + + + + Gets the blob's system properties. + + The blob's properties. + + + + Gets the user-defined metadata for the blob. + + The blob's metadata, as a collection of name-value pairs. + + + + Gets the blob's URI. + + The absolute URI to the blob. + + + + Gets the date and time that the blob snapshot was taken, if this blob is a snapshot. + + The blob's snapshot time if the blob is a snapshot; otherwise, null. + + If the blob is not a snapshot, the value of this property is null. + + + + + Gets the state of the most recent or pending copy operation. + + A object containing the copy state, or null if no copy blob state exists for this blob. + + + + Represents the permissions for a container. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the public access setting for the container. + + The public access setting for the container. + + + + Gets the set of shared access policies for the container. + + The set of shared access policies for the container. + + + + Represents the system properties for a container. + + + + + Gets the ETag value for the container. + + The container's quoted ETag value. + + + + Gets the container's last-modified time. + + The container's last-modified time. + + + + Gets the container's lease status. + + A object that indicates the container's lease status. + + + + Gets the container's lease state. + + A object that indicates the container's lease state. + + + + Gets the container's lease duration. + + A object that indicates the container's lease duration. + + + + Specifies the level of public access that is allowed on the container. + + + + + No public access. Only the account owner can read resources in this container. + + + + + Container-level public access. Anonymous clients can read container and blob data. + + + + + Blob-level public access. Anonymous clients can read only blob data within this container. + + + + + Represents a continuation token for listing operations. + + continuation tokens are used in methods that return a object, such as . + + + + Gets an XML representation of an object. + + + An that describes the XML representation of the object that is produced by the method and consumed by the method. + + + + + Generates a serializable continuation token from its XML representation. + + The stream from which the continuation token is deserialized. + + + + Converts a serializable continuation token into its XML representation. + + The stream to which the continuation token is serialized. + + + + Gets or sets the next marker for continuing results for enumeration operations. + + The next marker. + + + + Specifies which items to include when listing a set of blobs. + + + + + List only committed blobs, and do not return blob metadata. + + + + + List committed blobs and blob snapshots. + + + + + Retrieve blob metadata for each blob returned in the listing. + + + + + List committed and uncommitted blobs. + + + + + Include copy properties in the listing. + + + + + List all available committed blobs, uncommitted blobs, and snapshots, and return all metadata and copy status for those blobs. + + + + + Represents the system properties for a blob. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class based on an existing instance. + + The set of properties to clone. + + + + Gets or sets the cache-control value stored for the blob. + + The blob's cache-control value. + + + + Gets or sets the content-encoding value stored for the blob. + + The blob's content-encoding value. + + If this property has not been set for the blob, it returns null. + + + + + Gets or sets the content-language value stored for the blob. + + The blob's content-language value. + + If this property has not been set for the blob, it returns null. + + + + + Gets the size of the blob, in bytes. + + The blob's size in bytes. + + + + Gets or sets the content-MD5 value stored for the blob. + + The blob's content-MD5 hash. + + + + Gets or sets the content-type value stored for the blob. + + The blob's content-type value. + + If this property has not been set for the blob, it returns null. + + + + + Gets the blob's ETag value. + + The blob's ETag value. + + + + Gets the the last-modified time for the blob, expressed as a UTC value. + + The blob's last-modified time, in UTC format. + + + + Gets the type of the blob. + + A object that indicates the type of the blob. + + + + Gets the blob's lease status. + + A object that indicates the blob's lease status. + + + + Gets the blob's lease state. + + A object that indicates the blob's lease state. + + + + Gets the blob's lease duration. + + A object that indicates the blob's lease duration. + + + + Represents a set of timeout and retry policy options that may be specified for a blob operation request. + + + + + Initializes a new instance of the class. + + + + + Clones an instance of BlobRequestOptions so that we can apply defaults. + + BlobRequestOptions instance to be cloned. + + + + Gets or sets the retry policy. + + The retry policy. + + + + Gets or sets the server timeout interval for the request. + + The server timeout interval for the request. + + + + Gets or sets the maximum execution time accross all potential retries etc. + + The maximum execution time. + + + + Gets or sets a value to calculate and send/validate content MD5 for transactions. + + Use true to calculate and send/validate content MD5 for transactions; otherwise, false. + + + + Gets or sets a value to indicate that an MD5 hash will be calculated and stored when uploading a blob. + + Use true to calculate and store an MD5 hash when uploading a blob; otherwise, false. + + + + Gets or sets a value to indicate that MD5 validation will be disabled when downloading blobs. + + Use true to disable MD5 validation; false to enable MD5 validation. + + + + Represents a segment of results and contains continuation and pagination information. + + + + + Gets an enumerable collection of results. + + An enumerable collection of results. + + + + Gets the continuation token used to retrieve the next segment of results. + + The continuation token. + + + + The type of a blob. + + + + + Not specified. + + + + + A page blob. + + + + + A block blob. + + + + + Indicates whether to list only committed blocks, only uncommitted blocks, or all blocks. + + + + + Committed blocks. + + + + + Uncommitted blocks. + + + + + Both committed and uncommitted blocks. + + + + + Indicates which block lists should be searched to find a specified block. + + + + + Search the committed block list only. + + + + + Search the uncommitted block list only. + + + + + Search the uncommitted block list first, and if the block is not found there, search + the committed block list. + + + + + Specifies which details to include when listing the containers in this storage account. + + + + + No additional details. + + + + + Retrieve container metadata. + + + + + Retrieve all available details. + + + + + Represents a segment of results and contains continuation and pagination information. + + + + + Gets an enumerable collection of results. + + An enumerable collection of results. + + + + Gets the continuation token used to retrieve the next segment of results. + + The continuation token. + + + + Represents the attributes of a copy operation. + + + + + Gets the ID of the copy operation. + + A copy ID string. + + + + Gets the time the copy operation completed, whether completion was due to a successful copy, abortion, or a failure. + + A containing the completion time, or null. + + + + Gets the status of the copy operation. + + A enumeration indicating the status of the operation. + + + + Gets the source URI of a copy operation. + + A indicating the source of a copy operation, or null. + + + + Gets the number of bytes copied in the operation so far. + + The number of bytes copied in the operation so far, or null. + + + + Gets the total number of bytes in the source of the copy. + + The number of bytes in the source, or null. + + + + Gets the description of the current status, if any. + + A status description string, or null. + + + + Represents the status of a copy blob operation. + + + + + The copy status is invalid. + + + + + The copy operation is pending. + + + + + The copy operation succeeded. + + + + + The copy operation has been aborted. + + + + + The copy operation encountered an error. + + + + + The set of options describing delete operation. + + + + + Delete blobs but not snapshots. + + + + + Delete the blob and its snapshots. + + + + + Delete the blob's snapshots only. + + + + + Describes actions that can be performed on a lease. + + + + + Acquire the lease. + + + + + Renew the lease. + + + + + Release the lease. + + + + + Break the lease. + + + + + Change the lease ID. + + + + + The lease duration of a resource. + + + + + The lease duration is not specified. + + + + + The lease duration is finite. + + + + + The lease duration is infinite. + + + + + The lease state of a resource. + + + + + The lease state is not specified. + + + + + The lease is in the Available state. + + + + + The lease is in the Leased state. + + + + + The lease is in the Expired state. + + + + + The lease is in the Breaking state. + + + + + The lease is in the Broken state. + + + + + The lease status of a resource. + + + + + The lease status is not specified. + + + + + The resource is locked. + + + + + The resource is available to be locked. + + + + + Represents a block retrieved from the blob's block list. + + + + + Gets the name of the block. + + The block name. + + + + Gets the size of block in bytes. + + The block size. + + + + Gets a value indicating whether or not the block has been committed. + + True if the block has been committed; otherwise, false. + + + + Represents a range of pages in a page blob. + + + + + Initializes a new instance of the class. + + The starting offset. + The ending offset. + + + + Returns the content of the page range as a string. + + The content of the page range. + + + + Gets the starting offset of the page range. + + The starting offset. + + + + Gets the ending offset of the page range. + + The ending offset. + + + + Specifies the set of possible permissions for a shared access policy. + + + + + No shared access granted. + + + + + Read access granted. + + + + + Write access granted. + + + + + Delete access granted for blobs. + + + + + List access granted. + + + + + Represents the collection of shared access policies defined for a container. + + + + + Adds the specified key and value to the collection of shared access policies. + + The key of the value to add. + The value to add the collection of shared access policies. + + + + Determines whether the collection of shared access policies contains the specified key. + + The key to locate in the collection of shared access policies. + true if the collection of shared access policies contains an element with the specified key; otherwise, false. + + + + Removes the value with the specified key from the shared access policies collection. + + The key of the item to remove. + true if the element is successfully found and removed; otherwise, false. This method returns false if the key is not found. + + + + Gets the item associated with the specified key. + + The key of the value to get. + The item to get. + The item associated with the specified key, if the key is found; otherwise, the default value for the type. + + + + Adds the specified key/ value, stored in a , to the collection of shared access policies. + + The object, containing a key/ value pair, to add to the shared access policies collection. + + + + Removes all keys and values from the shared access collection. + + + + + Determines whether the collection of shared access policies contains the key and value in the specified object. + + A object containing the key and value to search for. + true if the shared access policies collection contains the specified key/value; otherwise, false. + + + + Copies each key/ value pair in the shared access policies collection to a compatible one-dimensional array, starting at the specified index of the target array. + + The one-dimensional array of objects that is the destination of the elements copied from the shared access policies collection. + The zero-based index in at which copying begins. + + + + Removes the value, specified in the object, from the shared access policies collection. + + The object, containing a key and value, to remove from the shared access policies collection. + true if the item was successfully removed; otherwise, false. + + + + Returns an enumerator that iterates through the collection of shared access policies. + + An of type . + + + + Returns an enumerator that iterates through the collection of shared access policies. + + An object that can be used to iterate through the collection of shared access policies. + + + + Gets a collection containing the keys in the shared access policies collection. + + A collection containing the keys in the of shared access policies collection. + + + + Gets a collection containing the values in the shared access policies collection. + + A collection of items in the shared access policies collection. + + + + Gets or sets the item associated with the specified key. + + The key of the value to get or set. + The item associated with the specified key, or null if key is not in the shared access policies collection. + + + + Gets the number of key/ value pairs contained in the shared access policies collection. + + The number of key/ value pairs contained in the shared access policies collection. + + + + Gets a value indicating whether the collection of shared access policies is read-only. + + true if the collection of shared access policies is read-only; otherwise, false. + + + + Represents a shared access policy, which specifies the start time, expiry time, + and permissions for a shared access signature. + + + + + Initializes a new instance of the class. + + + + + Converts the permissions specified for the shared access policy to a string. + + The shared access permissions. + The shared access permissions in string format. + + + + Constructs a object from a permissions string. + + The shared access permissions in string format. + A set of shared access permissions. + + + + Gets or sets the start time for a shared access signature associated with this shared access policy. + + The shared access start time. + + + + Gets or sets the expiry time for a shared access signature associated with this shared access policy. + + The shared access expiry time. + + + + Gets or sets the permissions for a shared access signature associated with this shared access policy. + + The permissions. + + + + Parses the response XML from an operation to set the access policy for a container. + + + + + Parses the response XML from an operation to set the access policy for a cloud object. + + The policy type to be filled. + + + + Provides a base class that is used internally to parse XML streams from storage service operations. + + The type to be parsed. + + + + Indicates that all parsable objects have been consumed. This field is reserved and should not be used. + + + + + Stores any objects that have not yet been parsed. This field is reserved and should not be used. + + + + + The reader used for parsing. This field is reserved and should not be used. + + + + + The IEnumerator over the parsed content. + + + + + Used to make sure that parsing is only done once, since a stream is not re-entrant. + + + + + Initializes a new instance of the ResponseParsingBase class. + + The stream to be parsed. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Parses the XML response. This method is reserved and should not be used. + + A collection of enumerable objects. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources, and optional + managed resources. + + True to release both managed and unmanaged resources; otherwise, false. + + + + This method is reserved and should not be used. + + True when the object is consumable. + + + + Parses the XML and close. + + A list of parsed results. + + + + Gets the parsable objects. This method is reserved and should not be used. + + The objects to parse. + + + + Initializes a new instance of the AccessPolicyResponseBase class. + + The stream to be parsed. + + + + Parses the current element. + + The shared access policy element to parse. + The shared access policy. + + + + Parses the response XML from a Set Container ACL operation to retrieve container-level access policy data. + + A list of enumerable key-value pairs. + + + + Gets an enumerable collection of container-level access policy identifiers. + + An enumerable collection of container-level access policy identifiers. + + + + Initializes a new instance of the BlobAccessPolicyResponse class. + + The stream to be parsed. + + + + Parses the current element. + + The shared access policy element to parse. + The shared access policy. + + + + Represents a container item returned in the XML response for a container listing operation. + + + + + + Initializes a new instance of the class. + + + + + Gets the user-defined metadata for the container. + + The container's metadata, as a collection of name-value pairs. + + + + Gets the container's system properties. + + The container's properties. + + + + Gets the name of the container. + + The container's name. + + + + Gets the container's URI. + + The absolute URI to the container. + + + + Provides error code strings that are specific to the Blob service. + + + + + Error code that may be returned when a block ID is invalid. + + + + + Error code that may be returned when a blob with the specified address cannot be found. + + + + + Error code that may be returned when a client attempts to create a blob that already exists. + + + + + Error code that may be returned when the specified block or blob is invalid. + + + + + Error code that may be returned when a block list is invalid. + + + + + The specified container was not found. + + + + + The specified container already exists. + + + + + The specified container is disabled. + + + + + The specified container is being deleted. + + + + + Error code that may be returned when there is currently no lease on the blob. + + + + + Error code that may be returned when there is currently no lease on the container. + + + + + Error code that may be returned when a lease ID was specified, but the lease has expired. + + + + + Error code that may be returned when the lease ID specified did not match the lease ID for the blob. + + + + + Error code that may be returned when the lease ID specified did not match the lease ID for the container. + + + + + Error code that may be returned when there is currently a lease on the resource and no lease ID was specified in the request. + + + + + Error code that may be returned when there is currently no lease on the resource. + + + + + Error code that may be returned when the lease ID specified did not match the lease ID. + + + + + Error code that may be returned when there is already a lease present. + + + + + Error code that may be returned when the lease has already been broken and cannot be broken again. + + + + + Error code that may be returned when the lease ID matched, but the lease has been broken explicitly and cannot be renewed. + + + + + Error code that may be returned when the lease ID matched, but the lease is breaking and cannot be acquired. + + + + + Error code that may be returned when the lease ID matched, but the lease is breaking and cannot be changed. + + + + + Error code that may be returned when the copy ID specified in an Abort Copy operation does not match the current pending copy ID. + + + + + Error code that may be returned when an Abort Copy operation is called when there is no pending copy. + + + + + Error code that may be returned when an attempt to modify the destination of a pending copy is made. + + + + + Error code that may be returned when the source of a copy cannot be accessed. + + + + + Error code that may be returned when the destination of a copy operation has a lease of fixed duration. + + + + + Provides a set of parameters for a blob listing operation. + + + + + Represents the listing context for enumeration operations. + + + + + Initializes a new instance of the class. + + The resource name prefix. + The maximum number of resources to return in a single operation, up to the per-operation limit of 5000. + + + + Gets or sets the Prefix value. + + The Prefix value. + + + + Gets or sets the MaxResults value. + + The MaxResults value. + + + + Gets or sets the Marker value. + + The Marker value. + + + + Initializes a new instance of the class. + + The blob prefix. + The maximum number of results to return. + The blob delimiter. + The include parameter. + + + + Gets or sets the delimiter for a blob listing operation. + + The delimiter to use to traverse the virtual hierarchy of blobs. + + The delimiter parameter enables the caller to traverse the blob namespace by using a user-configured delimiter. + Using this parameter, it is possible to traverse a virtual hierarchy of blobs as though it were a file system. + + + + + Gets or sets the details for the listing operation, which indicates the types of data to include in the + response. + + The details to include in the listing operation. + + The include parameter specifies that the response should include one or more of the following subsets: snapshots, + metadata, uncommitted blobs. + + + + + Provides a set of helper methods for constructing a request against the Blob service. + + + + + Converts the date time to snapshot string. + + The date time. + The converted string. + + + + Writes a collection of shared access policies to the specified stream in XML format. + + A collection of shared access policies. + An output stream. + + + + Writes the body of the block list to the specified stream in XML format. + + An enumerable collection of objects. + The stream to which the block list is written. + + + + Provides methods for parsing the response from an operation to return a block list. + + + + + Initializes a new instance of the class. + + The stream to be parsed. + + + + Reads a block item for block listing. + + Whether we are currently listing committed blocks or not + Block listing entry + + + + Parses the XML response returned by an operation to retrieve a list of blocks. + + An enumerable collection of objects. + + + + Gets an enumerable collection of objects from the response. + + An enumerable collection of objects. + + + + Provides methods for parsing the response from an operation to get a range of pages for a page blob. + + + + + Initializes a new instance of the class. + + The stream of page ranges to be parsed. + + + + Reads a page range. + + Page range entry + + + + Parses the XML response for an operation to get a range of pages for a page blob. + + An enumerable collection of objects. + + + + Gets an enumerable collection of objects from the response. + + An enumerable collection of objects. + + + + Represents an item that may be returned by a blob listing operation. + + + + + Represents a blob item returned in the XML response for a blob listing operation. + + + + + Initializes a new instance of the class. + + The name of the blob. + The blob's attributes. + + + + Stores the blob item's attributes. + + + + + Gets the name of the blob item. + + The name of the blob item. + + + + Gets the blob item's system properties. + + The blob item's properties. + + + + Gets the user-defined metadata for the blob item. + + The blob item's metadata, as a collection of name-value pairs. + + + + Gets the blob item's URI. + + The absolute URI to the blob item. + + + + Gets the date and time that the blob snapshot was taken, if this blob is a snapshot. + + The blob's snapshot time if the blob is a snapshot; otherwise, null. + + If the blob is not a snapshot, the value of this property is null. + + + + + Gets the state of the most recent or pending copy operation. + + A object containing the copy state, or null if no copy blob state exists for this blob. + + + + Represents the blob name prefix that is returned in the XML response for a blob listing operation. + + + + + Gets the blob name prefix. + + The blob name prefix. + + + + Provides methods for parsing the response from a blob listing operation. + + + + + Stores the blob prefix. + + + + + Signals when the blob prefix can be consumed. + + + + + Stores the marker. + + + + + Signals when the marker can be consumed. + + + + + Stores the blob delimiter. + + + + + Signals when the blob delimiter can be consumed. + + + + + Stores the max results. + + + + + Signals when the max results can be consumed. + + + + + Stores the next marker. + + + + + Signals when the next marker can be consumed. + + + + + Initializes a new instance of the class. + + The stream to be parsed. + + + + Parses a blob entry in a blob listing response. + + Blob listing entry + + + + Parses a blob prefix entry in a blob listing response. + + Blob listing entry + + + + Parses the response XML for a blob listing operation. + + An enumerable collection of objects that implement . + + + + Gets the listing context from the XML response. + + A set of parameters for the listing operation. + + + + Gets an enumerable collection of objects that implement from the response. + + An enumerable collection of objects that implement . + + + + Gets the Prefix value provided for the listing operation from the XML response. + + The Prefix value. + + + + Gets the Marker value provided for the listing operation from the XML response. + + The Marker value. + + + + Gets the Delimiter value provided for the listing operation from the XML response. + + The Delimiter value. + + + + Gets the MaxResults value provided for the listing operation from the XML response. + + The MaxResults value. + + + + Gets the NextMarker value from the XML response, if the listing was not complete. + + The NextMarker value. + + + + Provides methods for parsing the response from a container listing operation. + + + + + Stores the container prefix. + + + + + Signals when the container prefix can be consumed. + + + + + Stores the marker. + + + + + Signals when the marker can be consumed. + + + + + Stores the max results. + + + + + Signals when the max results can be consumed. + + + + + Stores the next marker. + + + + + Signals when the next marker can be consumed. + + + + + Initializes a new instance of the class. + + The stream to be parsed. + + + + Reads a container entry completely including its properties and metadata. + + Container listing entry + + + + Parses the response XML for a container listing operation. + + An enumerable collection of objects. + + + + Gets the listing context from the XML response. + + A set of parameters for the listing operation. + + + + Gets an enumerable collection of objects from the response. + + An enumerable collection of objects. + + + + Gets the Prefix value provided for the listing operation from the XML response. + + The Prefix value. + + + + Gets the Marker value provided for the listing operation from the XML response. + + The Marker value. + + + + Gets the MaxResults value provided for the listing operation from the XML response. + + The MaxResults value. + + + + Gets the NextMarker value from the XML response, if the listing was not complete. + + The NextMarker value. + + + + Describes actions that may be used for writing to a page blob or clearing a set of pages. + + + + + Update the page with new data. + + + + + Clear the page. + + + + + Represents a block in a block list. + + + + + Initializes a new instance of the class. + + The block ID. + One of the enumeration values that specifies in which block lists to search for the block. + + + + Gets the block ID. + + The block ID. + + + + Gets a value that indicates which block lists to search for the block. + + One of the enumeration values that specifies in which block lists to search for the block. + + + + Enumeration controlling the options for updating queue messages. + + + + + Update the message visibility timeout. + + + + + Update the message content. + + + + + Enum for Queue message type. + Internal use only. + + + + + Indicates the message object stores the raw text string. + + + + + Indicates the message object stores the Base64-Encoded representation of the raw data. + + + + + Represents a set of timeout and retry policy options that may be specified for a queue operation request. + + + + + Initializes a new instance of the class. + + + + + Clones an instance of QueueRequestOptions so that we can apply defaults. + + QueueRequestOptions instance to be cloned. + + + + Gets or sets the retry policy for the request. + + The retry policy delegate. + + + + Gets or sets the server timeout for the request. + + The client and server timeout interval for the request. + + + + Gets or sets the maximum execution time accross all potential retries etc. + + The maximum execution time. + + + + Represents a segment of results and contains continuation and pagination information. + + + + + Gets an enumerable collection of results. + + An enumerable collection of results. + + + + Gets the continuation token used to retrieve the next segment of results. + + The continuation token. + + + + Specifies the set of possible permissions for a shared access queue policy. + + + + + No shared access granted. + + + + + Permission to peek messages and get queue metadata granted. + + + + + Permission to add messages granted. + + + + + Permissions to update messages granted. + + + + + Permission to get and delete messages granted. + + + + + Represents the collection of shared access policies defined for a queue. + + + + + Adds the specified key and value to the collection of shared access policies. + + The key of the value to add. + The value to add the collection of shared access policies. + + + + Determines whether the collection of shared access policies contains the specified key. + + The key to locate in the collection of shared access policies. + true if the collection of shared access policies contains an element with the specified key; otherwise, false. + + + + Removes the value with the specified key from the shared access policies collection. + + The key of the item to remove. + true if the element is successfully found and removed; otherwise, false. This method returns false if the key is not found. + + + + Gets the item associated with the specified key. + + The key of the value to get. + The item to get. + The item associated with the specified key, if the key is found; otherwise, the default value for the type. + + + + Adds the specified key/ value, stored in a , to the collection of shared access policies. + + The object, containing a key/ value pair, to add to the shared access policies collection. + + + + Removes all keys and values from the shared access collection. + + + + + Determines whether the collection of shared access policies contains the key and value in the specified object. + + A object containing the key and value to search for. + true if the shared access policies collection contains the specified key/value; otherwise, false. + + + + Copies each key/ value pair in the shared access policies collection to a compatible one-dimensional array, starting at the specified index of the target array. + + The one-dimensional array of objects that is the destination of the elements copied from the shared access policies collection. + The zero-based index in at which copying begins. + + + + Removes the value, specified in the object, from the shared access policies collection. + + The object, containing a key and value, to remove from the shared access policies collection. + true if the item was successfully removed; otherwise, false. + + + + Returns an enumerator that iterates through the collection of shared access policies. + + An of type . + + + + Returns an enumerator that iterates through the collection of shared access policies. + + An object that can be used to iterate through the collection of shared access policies. + + + + Gets a collection containing the keys in the shared access policies collection. + + A collection containing the keys in the of shared access policies collection. + + + + Gets a collection containing the values in the shared access policies collection. + + A collection of items in the shared access policies collection. + + + + Gets or sets the item associated with the specified key. + + The key of the value to get or set. + The item associated with the specified key, or null if key is not in the shared access policies collection. + + + + Gets the number of key/ value pairs contained in the shared access policies collection. + + The number of key/ value pairs contained in the shared access policies collection. + + + + Gets a value indicating whether the collection of shared access policies is read-only. + + true if the collection of shared access policies is read-only; otherwise, false. + + + + Represents a shared access policy for a queue, which specifies the start time, expiry time, + and permissions for a shared access signature. + + + + + Initializes a new instance of the SharedAccessQueuePolicy class. + + + + + Converts the permissions specified for the shared access policy to a string. + + The shared access permissions. + The shared access permissions in string format. + + + + Constructs a object from a permissions string. + + The shared access permissions in string format. + A set of shared access permissions. + + + + Gets or sets the start time for a shared access signature associated with this shared access policy. + + The shared access start time. + + + + Gets or sets the expiry time for a shared access signature associated with this shared access policy. + + The shared access expiry time. + + + + Gets or sets the permissions for a shared access signature associated with this shared access policy. + + The permissions. + + + + Provides methods for parsing the response from an operation to get messages from a queue. + + + + + Initializes a new instance of the class. + + The stream of messages to parse. + + + + Parses the XML response returned by an operation to get messages from a queue. + + An enumerable collection of objects. + + + + Gets an enumerable collection of objects from the response. + + An enumerable collection of objects. + + + + Provides methods for parsing the response from a queue listing operation. + + + + + Stores the container prefix. + + + + + Signals when the container prefix can be consumed. + + + + + Stores the marker. + + + + + Signals when the marker can be consumed. + + + + + Stores the max results. + + + + + Signals when the max results can be consumed. + + + + + Stores the next marker. + + + + + Signals when the next marker can be consumed. + + + + + Initializes a new instance of the class. + + The stream to be parsed. + + + + Parses the response XML for a container listing operation. + + An enumerable collection of objects. + + + + Gets the listing context from the XML response. + + A set of parameters for the listing operation. + + + + Gets an enumerable collection of objects from the response. + + An enumerable collection of objects. + + + + Gets the Prefix value provided for the listing operation from the XML response. + + The Prefix value. + + + + Gets the Marker value provided for the listing operation from the XML response. + + The Marker value. + + + + Gets the MaxResults value provided for the listing operation from the XML response. + + The MaxResults value. + + + + Gets the NextMarker value from the XML response, if the listing was not complete. + + The NextMarker value. + + + + Parses the response XML from an operation to set the access policy for a queue. + + + + + Initializes a new instance of the QueueAccessPolicyResponse class. + + The stream to be parsed. + + + + Parses the current element. + + The shared access policy element to parse. + The shared access policy. + + + + Represents a continuation token returned by the Queue service. + + + + + Gets an XML representation of an object. + + + An that describes the XML representation of the object that is produced by the method and consumed by the method. + + + + + Generates a serializable continuation token from its XML representation. + + The stream from which the continuation token is deserialized. + + + + Converts a serializable continuation token into its XML representation. + + The stream to which the continuation token is serialized. + + + + Gets or sets the NextMarker for continuing results for CloudQueeu enumeration operations. + + The next marker. + + + + Represents a queue item returned in the XML response for a queue listing operation. + + + + + Initializes a new instance of the class. + + + + + Gets the user-defined metadata for the queue. + + The queue's metadata, as a collection of name-value pairs. + + + + Gets the name of the queue. + + The queue's name. + + + + Gets the queue's URI. + + The absolute URI to the queue. + + + + Provides error code strings that are specific to the Queue service. + + + + + Error code that may be returned when the specified queue was not found. + + + + + Error code that may be returned when the specified queue is disabled. + + + + + Error code that may be returned when the specified queue already exists. + + + + + Error code that may be returned when the specified queue is not empty. + + + + + Error code that may be returned when the specified queue is being deleted. + + + + + Error code that may be returned when the specified pop receipt does not match. + + + + + Error code that may be returned when one or more request parameters are invalid. + + + + + Error code that may be returned when the specified message was not found. + + + + + Error code that may be returned when the specified message is too large. + + + + + Error code that may be returned when the specified marker is invalid. + + + + + Provides a set of parameters for a queue listing operation. + + + + + Initializes a new instance of the class. + + The queue prefix. + The maximum number of results to return. + The include parameter. + + + + Gets or sets the details for the listing operation, which indicates the types of data to include in the + response. + + The details to include in the listing operation. + + + + Specifies which details to include when listing the queues in this storage account. + + + + + No additional details. + + + + + Retrieve queue metadata. + + + + + Retrieve all available details. + + + + + Represents a message retrieved from a queue. + + + + + Initializes a new instance of the class. + + + + + Gets the message expiration time. + + The message expiration time. + + + + Gets the message ID. + + The message ID. + + + + Gets the time the message was added to the queue. + + The message insertion time. + + + + Gets the time the message is next visible. + + The time the message is next visible. + + + + Gets the pop receipt for the message. + + The message's pop receipt. + + + + Gets the text of the message. + + The message text. + + + + Gets the number of times this message has been dequeued. + + The dequeue count. + + + + Represents the permissions for a queue. + + + + + Initializes a new instance of the class. + + + + + Gets the set of shared access policies for the queue. + + The set of shared access policies for the queue. + + + + Provides a set of helper methods for constructing a request against the Queue service. + + + + + Writes a collection of shared access policies to the specified stream in XML format. + + A collection of shared access policies. + An output stream. + + + + Writes a message to the specified stream in XML format. + + The message body. + An output stream. + + + + A type which allows callers direct access to the property map of the entity. This class eliminates the use of reflection for serialization and deserialization. + + + + + An interface required for table entity types. The interface declares getter and setter methods for the mandatory entity properties, and + and methods for serialization and de-serialization of all entity properties using a property dictionary. Create classes implementing to customize property + storage, retrieval, serialization and de-serialization, and to provide additional custom logic for a table entity. + + The Storage client library includes two implementations of that provide for simple property access and serialization: + implements and provides a simple property dictionary to store and retrieve properties. Use a for simple access + to entity properties when only a subset of properties are returned (for example, by a select clause in a query), or for when your query can return multiple entity types + with different properties. You can also use this type to perform bulk table updates of heterogeneous entities without losing property information. + is an implementation of that uses reflection-based serialization and de-serialization behavior in its and methods. + -derived classes with methods that follow a convention for types and naming are serialized and de-serialized automatically. -derived classes must also provide a get-able and set-able public + property of a type that is supported by the Windows Azure Table Service. + + + + Populates the entity's properties from the data values in the dictionary. + + The dictionary of string property names to data values to de-serialize and store in this table entity instance. + An object used to track the execution of the operation. + + + + Serializes the of property names mapped to data values from the entity instance. + + An object used to track the execution of the operation. + A dictionary of property names to data typed values created by serializing this table entity instance. + + + + Gets or sets the entity's partition key. + + The entity's partition key. + + + + Gets or sets the entity's row key. + + The entity's row key. + + + + Gets or sets the entity's time stamp. + + The entity's time stamp. The property is populated by the Windows Azure Table Service. + + + + Gets or sets the entity's current ETag. Set this value to '*' + in order to blindly overwrite an entity as part of an update + operation. + + The entity's time stamp. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified partition key and row key. + + The partition key value for the entity. + The row key value for the entity. + + + + Initializes a new instance of the class with the entity's partition key, row key, ETag (if available/required), and properties. + + The entity's partition key. + The entity's row key. + The entity's current ETag. + The entity's properties, indexed by property name. + + + + Initializes a new instance of the class with the entity's partition key, row key, time stamp, ETag (if available/required), and properties. + + The entity's partition key. + The entity's row key. + The timestamp for this entity as returned by Windows Azure. + The entity's current ETag; set to null to ignore the ETag during subsequent update operations. + An containg a map of property names to data typed values to store in the new . + + + + Deserializes this instance using the specified of property names to data typed values. + + A collection containing the of string property names mapped to data typed values to store in this instance. + An object used to track the execution of the operation. + + + + Serializes the of property names mapped to data values from this instance. + + An object used to track the execution of the operation. + A collection containing the map of string property names to data typed values stored in this instance. + + + + Gets or sets the properties in the table entity, indexed by property name. + + The entity properties. + + + + Gets or sets the entity's partition key. + + The entity partition key. + + + + Gets or sets the entity's row key. + + The entity row key. + + + + Gets or sets the entity's time stamp. + + The entity time stamp. + + + + Gets or sets the entity's current ETag. Set this value to '*' in order to blindly overwrite an entity as part of an update operation. + + The entity Etag. + + + + Gets or sets the entity's property, given the name of the property. + + The name of the property. + The property. + + + + Enumeration containing the types of values that can be stored in + a table entity property. + + + + + Represents fixed- or variable-length character data. + + + + + Represents fixed- or variable-length binary data. + + + + + Represents the mathematical concept of binary-valued logic. + + + + + Represents date and time. + + + + + Represents a floating point number with 15 digits precision that can represent values with approximate range of +/- 2.23e -308 through +/- 1.79e +308. + + + + + Represents a 16-byte (128-bit) unique identifier value. + + + + + Represents a signed 32-bit integer value. + + + + + Represents a signed 64-bit integer value. + + + + + Class for storing information about a single property in an Azure + Table entity. + + + + + Creates a new object that represents the specified offset value. + + The value for the new . + A new of the offset type. + + + + Creates a new object that represents the specified byte array. + + The value for the new . + A new of the byte array. + + + + Creates a new object that represents the specified value. + + The value for the new . + A new of the type. + + + + Creates a new object that represents the specified value. + + The value for the new . + A new of the type. + + + + Creates a new object that represents the specified value. + + The value for the new . + A new of the type. + + + + Creates a new object that represents the specified value. + + The value for the new . + A new of the type. + + + + Creates a new object that represents the specified value. + + The value for the new . + A new of the type. + + + + Creates a new object that represents the specified value. + + The value for the new . + A new of the type. + + + + Initializes a new instance of the class by using the + byte array value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + offset value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the class by using the + value of the property. + + The value for the new . + + + + Initializes a new instance of the EntityProperty class given the + EdmType of the property (the value must be set by a public + constructor). + + + + + Compares the given object (which is probably an ) + for equality with this object. + + The other object. + true if the objects are equivalent; false otherwise. + + + + Gets the hash code for this entity property. + + The hash code for the entity property. + + + + Ensures that the given type matches the type of this entity + property; throws an exception if the types do not match. + + + + + Gets the of this object. + + The of this object. + + + + Gets or sets the byte array value of this object. + An exception will be thrown if you attempt to set this property to anything other than an byte array. + + The byte array value of this object. + + + + Gets or sets the value of this object. + An exception will be thrown if you attempt to set this property to anything other than an Object. + + The value of this object. + + + + Gets or sets the offset value of this object. + An exception will be thrown if you attempt to set this property to anything other than a object. + + The offset value of this object. + + + + Gets or sets the value of this object. + An exception will be thrown if you attempt to set this property to anything other than a object. + + The value of this object. + + + + Gets or sets the value of this object. + An exception will be thrown if you attempt to set this property to anything other than a object. + + The value of this object. + + + + Gets or sets the value of this object. + An exception will be thrown if you attempt to set this property to anything other than an Object. + + The value of this object. + + + + Gets or sets the value of this object. + An exception will be thrown if you attempt to set this property to anything other than an Object. + + The value of this object. + + + + Gets or sets the value of this object. + An exception will be thrown if you attempt to set this property to anything other than a object. + + The value of this object. + + + + Returns a delegate for resolving entities. + + The type into which the will project the query results. + The partition key. + The row key. + The timestamp. + A dictionary of properties. + The ETag. + + + + + Represents a segment of results and contains continuation token information. + + + + + Initializes a new instance of the class. + + The result. + + + + Stores the continuation token used to retrieve the next segment of results. + + + + + Returns an enumerator that iterates through the segment of results. + + An enumerator that iterates through the segment of results. + + + + Gets an enumerable collection of results. + + An enumerable collection of results. + + + + Gets a continuation token to use to retrieve the next set of results with a subsequent call to the operation. + + The continuation token. + + + + Defines the set of comparison operators that may be used for constructing queries. + + + + + Represents the Equal operator. + + + + + Represents the Not Equal operator. + + + + + Represents the Greater Than operator. + + + + + Represents the Greater Than or Equal operator. + + + + + Represents the Less Than operator. + + + + + Represents the Less Than or Equal operator. + + + + + Specifies the set of possible permissions for a shared access table policy. + + + + + No shared access granted. + + + + + Permission to query entities granted. + + + + + Permission to add entities granted. + + + + + Permission to modify entities granted. + + + + + Permission to delete entities granted. + + + + + Represents the collection of shared access policies defined for a table. + + + + + Adds the specified key and value to the collection of shared access policies. + + The key of the value to add. + The value to add to the collection of shared access policies. + + + + Determines whether the collection of shared access policies contains the specified key. + + The key to locate in the collection of shared access policies. + true if the collection of shared access policies contains an element with the specified key; otherwise, false. + + + + Removes the value with the specified key from the shared access policies collection. + + The key of the item to remove. + true if the element is successfully found and removed; otherwise, false. This method returns false if the key is not found. + + + + Gets the item associated with the specified key. + + The key of the value to get. + The item to get. + The item associated with the specified key, if the key is found; otherwise, the default value for the type. + + + + Adds the specified key/ value, stored in a , to the collection of shared access policies. + + The object, containing a key/ value pair, to add to the shared access policies collection. + + + + Removes all keys and values from the shared access collection. + + + + + Determines whether the collection of shared access policies contains the key and value in the specified object. + + A object containing the key and value to search for. + true if the shared access policies collection contains the specified key/value; otherwise, false. + + + + Copies each key/ value pair in the shared access policies collection to a compatible one-dimensional array, starting at the specified index of the target array. + + The one-dimensional array of objects that is the destination of the elements copied from the shared access policies collection. + The zero-based index in at which copying begins. + + + + Removes the value, specified in the object, from the shared access policies collection. + + The object, containing a key and value, to remove from the shared access policies collection. + true if the item was successfully removed; otherwise, false. + + + + Returns an enumerator that iterates through the collection of shared access policies. + + An of type . + + + + Returns an enumerator that iterates through the collection of shared access policies. + + An object that can be used to iterate through the collection of shared access policies. + + + + Gets a collection containing the keys in the shared access policies collection. + + A collection containing the keys in the of shared access policies collection. + + + + Gets a collection containing the values in the shared access policies collection. + + A collection of items in the shared access policies collection. + + + + Gets or sets the item associated with the specified key. + + The key of the value to get or set. + The item associated with the specified key, or null if key is not in the shared access policies collection. + + + + Gets the number of key/ value pairs contained in the shared access policies collection. + + The number of key/ value pairs contained in the shared access policies collection. + + + + Gets a value indicating whether the collection of shared access policies is read-only. + + true if the collection of shared access policies is read-only; otherwise, false. + + + + Represents a shared access policy, which specifies the start time, expiry time, + and permissions for a shared access signature. + + + + + Initializes a new instance of the SharedAccessTablePolicy class. + + + + + Converts the permissions specified for the shared access policy to a string. + + The shared access permissions. + The shared access permissions in string format. + + + + Constructs a object from a permissions string. + + The shared access permissions in string format. + A set of shared access permissions. + + + + Gets or sets the start time for a shared access signature associated with this shared access policy. + + The shared access start time. + + + + Gets or sets the expiry time for a shared access signature associated with this shared access policy. + + The shared access expiry time. + + + + Gets or sets the permissions for a shared access signature associated with this shared access policy. + + The permissions. + + + + Represents a continuation token for listing operations. + + A method that may return a partial set of results via a object also returns a continuation token, + which can be used in a subsequent call to return the next set of available results. + + + + Gets an XML representation of an object. + + + An that describes the XML representation of the object that is produced by the method and consumed by the method. + + + + + Generates a serializable continuation token from its XML representation. + + The stream from which the continuation token is deserialized. + + + + Converts a serializable continuation token into its XML representation. + + The stream to which the continuation token is serialized. + + + + Gets or sets the next partition key for enumeration operations. + + The next partition key. + + + + Gets or sets the next row key for enumeration operations. + + The next row key. + + + + Gets or sets the next table name for enumeration operations. + + The name of the next table. + + + + Represents the base object type for a table entity in the Table Storage service. + + provides a base implementation for the interface that provides and methods that by default serialize and + de-serialize all properties via reflection. A table entity class may extend this class and override the and methods to provide customized or better performing serialization logic. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified partition key and row key. + + The partition key of the to be initialized. + The row key of the to be initialized. + + + + De-serializes this instance using the specified of property names to data typed values. + + The map of string property names to data values to de-serialize and store in this table entity instance. + An object used to track the execution of the operation. + + + + Serializes the of property names mapped to data values from this instance. + + An object used to track the execution of the operation. + A map of property names to data typed values created by serializing this table entity instance. + + + + Gets or sets the entity's partition key. + + The partition key of the entity. + + + + Gets or sets the entity's row key. + + The row key of the entity. + + + + Gets or sets the entity's timestamp. + + The timestamp of the entity. + + + + Gets or sets the entity's current ETag. Set this value to '*' in order to blindly overwrite an entity as part of an update operation. + + The ETag of the entity. + + + + Enumeration containing the types of operations that can be + performed by a . + + + + + Represents an insert operation. + + + + + Represents a delete operation. + + + + + Represents a replace operation. + + + + + Represents a merge operation. + + + + + Represents an insert or replace operation. + + + + + Represents an insert or merge operation. + + + + + Represents a retrieve operation. + + + + + Defines the set of Boolean operators for constructing queries. + + + + + Represents the And operator. + + + + + Represents the Not operator. + + + + + Represents the Or operator. + + + + + Represents the permissions for a table. + + + + + Initializes a new instance of the TablePermissions class. + + + + + Gets the set of shared access policies for the container. + + The set of shared access policies for the container. + + + + Represents a segment of results and contains continuation token information. + + The type of the result that the segment contains. + + + + Stores the continuation token used to retrieve the next segment of results. + + + + + Initializes a new instance of the class. + + The result. + + + + Returns an enumerator that iterates through the . + + An enumerator that iterates through the . + + + + Gets an enumerable collection of results. + + An enumerable collection of results. + + + + Gets a continuation token to use to retrieve the next set of results with a subsequent call to the operation. + + The continuation token. + + + + Represents a set of timeout and retry policy options that may be specified for a table operation request. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified . + + The request options used to initialize this instance of the class. + + + + Gets or sets the retry policy for the request. + + The retry policy delegate. + + + + Gets or sets the server timeout for the request. + + The client and server timeout interval for the request. + + + + Gets or sets the maximum execution time for all potential retries. + + A representing the maximum execution time for retries. + + + + Represents the result of a table operation. + + The class encapsulates the HTTP response and any table entity results returned by the Storage Service REST API operation called for a particular . + + + + Gets or sets the result returned by the as an . + + The result of the table operation as an . + + + + Gets or sets the HTTP status code returned by a request. + + The HTTP status code returned by a request. + + + + Gets or sets the Etag returned with the request results. + + The Etag returned with the request results. + + + + Parses the response XML from an operation to set the access policy for a table. + + + + + Initializes a new instance of the TableAccessPolicyResponse class. + + The stream to be parsed. + + + + Parses the current element. + + The shared access policy element to parse. + The shared access policy. + + + + A set of constants used in operations against the Table service. + + + + + Stores the header prefix for continuation information. + + + + + Stores the header suffix for the next partition key. + + + + + Stores the header suffix for the next row key. + + + + + Stores the table suffix for the next table name. + + + + + Stores the maximum results the table service can return. + + + + + The maximum size of a string property for the table service in bytes. + + + + + The maximum size of a string property for the table service in bytes. + + + + + The maximum size of a string property for the table service in chars. + + + + + The name of the special table used to store tables. + + + + + XML element for table error codes. + + + + + XML element for table error messages. + + + + + The name of the partition key property. + + + + + The name of the row key property. + + + + + The name of the Timestamp property. + + + + + The name of the special table used to store tables. + + + + + The name of the property that stores the table name. + + + + + The query filter clause name. + + + + + The query top clause name. + + + + + The query select clause name. + + + + + The minimum DateTime supported. + + + + + Provides error code strings that are specific to the Windows Azure Table service. + + + + + The request uses X-HTTP-Method with an HTTP verb other than POST. + + + + + The specified X-HTTP-Method is invalid. + + + + + More than one X-HTTP-Method is specified. + + + + + The specified table has no properties. + + + + + A property is specified more than once. + + + + + The specified table has no such property. + + + + + A duplicate key property was specified. + + + + + The specified table already exists. + + + + + The specified table was not found. + + + + + The specified entity was not found. + + + + + The specified entity already exists. + + + + + The partition key was not specified. + + + + + One or more specified operators are invalid. + + + + + The specified update condition was not satsified. + + + + + All properties must have values. + + + + + The partition key property cannot be updated. + + + + + The entity contains more properties than allowed. + + + + + The entity is larger than the maximum size permitted. + + + + + The property value is larger than the maximum size permitted. + + + + + One or more value types are invalid. + + + + + The specified table is being deleted. + + + + + The Table service server is out of memory. + + + + + The type of the primary key property is invalid. + + + + + The property name exceeds the maximum allowed length. + + + + + The property name is invalid. + + + + + Batch operations are not supported for this operation type. + + + + + JSON format is not supported. + + + + + The specified method is not allowed. + + + + + The specified operation is not yet implemented. + + + + + Provides a set of helper methods for constructing a request against the Table service. + + + + + Writes a collection of shared access policies to the specified stream in XML format. + + A collection of shared access policies. + An output stream. + + + + Converts a string to UTC time. + + The string to convert. + A UTC representation of the string. + + + + Contains storage constants. + + + + + Maximum number of shared access policy identifiers supported by server. + + + + + Default Write Block Size used by Blob stream. + + + + + The maximum size of a blob before it must be separated into blocks. + + + + + The maximum size of a single block. + + + + + The maximum number of blocks. + + + + + The maximum size of a blob with blocks. + + + + + Default size of buffer for unknown sized requests. + + + + + The size of a page in a PageBlob. + + + + + A constant representing a kilo-byte (Non-SI version). + + + + + A constant representing a megabyte (Non-SI version). + + + + + A constant representing a megabyte (Non-SI version). + + + + + XML element for committed blocks. + + + + + XML element for uncommitted blocks. + + + + + XML element for blocks. + + + + + XML element for names. + + + + + XML element for sizes. + + + + + XML element for block lists. + + + + + XML element for queue message lists. + + + + + XML element for queue messages. + + + + + XML element for message IDs. + + + + + XML element for insertion times. + + + + + XML element for expiration times. + + + + + XML element for pop receipts. + + + + + XML element for the time next visible fields. + + + + + XML element for message texts. + + + + + XML element for dequeue counts. + + + + + XML element for page ranges. + + + + + XML element for page list elements. + + + + + XML element for page range start elements. + + + + + XML element for page range end elements. + + + + + XML element for delimiters. + + + + + XML element for blob prefixes. + + + + + XML element for content type fields. + + + + + XML element for content type fields. + + + + + XML element for content encoding fields. + + + + + XML element for content language fields. + + + + + XML element for content length fields. + + + + + XML element for content MD5 fields. + + + + + XML element for enumeration results. + + + + + XML element for blobs. + + + + + XML element for prefixes. + + + + + XML element for maximum results. + + + + + XML element for markers. + + + + + XML element for the next marker. + + + + + XML element for the ETag. + + + + + XML element for the last modified date. + + + + + XML element for the Url. + + + + + XML element for blobs. + + + + + XML element for copy ID. + + + + + XML element for copy status. + + + + + XML element for copy source. + + + + + XML element for copy progress. + + + + + XML element for copy completion time. + + + + + XML element for copy status description. + + + + + Constant signaling a page blob. + + + + + Constant signaling a block blob. + + + + + Constant signaling the blob is locked. + + + + + Constant signaling the blob is unlocked. + + + + + Constant signaling the resource is available for leasing. + + + + + Constant signaling the resource is leased. + + + + + Constant signaling the resource's lease has expired. + + + + + Constant signaling the resource's lease is breaking. + + + + + Constant signaling the resource's lease is broken. + + + + + Constant signaling the resource's lease is infinite. + + + + + Constant signaling the resource's lease is fixed (finite). + + + + + Constant for a pending copy. + + + + + Constant for a successful copy. + + + + + Constant for an aborted copy. + + + + + Constant for a failed copy. + + + + + XML element for blob types. + + + + + XML element for the lease status. + + + + + XML element for the lease status. + + + + + XML element for the lease status. + + + + + XML element for snapshots. + + + + + XML element for containers. + + + + + XML element for a container. + + + + + XML element for queues. + + + + + XML element for the queue name. + + + + + Version 2 of the XML element for the queue name. + + + + + XML element for the queue. + + + + + XML element for properties. + + + + + XML element for the metadata. + + + + + XML element for an invalid metadata name. + + + + + XPath query for error codes. + + + + + XPath query for error messages. + + + + + XML element for maximum results. + + + + + XML element for committed blocks. + + + + + XML element for uncommitted blocks. + + + + + XML element for the latest. + + + + + XML element for signed identifiers. + + + + + XML element for a signed identifier. + + + + + XML element for access policies. + + + + + XML attribute for IDs. + + + + + XML element for the start time of an access policy. + + + + + XML element for the end of an access policy. + + + + + XML element for the permissions of an access policy. + + + + + The URI path component to access the messages in a queue. + + + + + XML element for exception details. + + + + + XML root element for errors. + + + + + XML element for error codes. + + + + + XML element for error codes returned by the preview tenants. + + + + + XML element for error messages. + + + + + XML element for error messages. + + + + + XML element for exception messages. + + + + + XML element for stack traces. + + + + + XML element for the authentication error details. + + + + + XML namespace for the WCF Data Services metadata. + + + + + Default client side timeout for all service clients. + + + + + Default server side timeout for all service clients. + + + + + Maximum Retry Policy Backoff + + + + + Maximum allowed timeout for any request. + + + + + Constants for HTTP headers. + + + + + Specifies the value to use for UserAgent header. + + + + + Specifies the value to use for UserAgent header. + + + + + Specifies the value to use for UserAgent header. + + + + + Master Windows Azure Storage header prefix. + + + + + Header prefix for properties. + + + + + Header prefix for metadata. + + + + + Header for data ranges. + + + + + Header for range content MD5. + + + + + Header for storage version. + + + + + Header for copy source. + + + + + Header for the If-Match condition. + + + + + Header for the If-Modified-Since condition. + + + + + Header for the If-None-Match condition. + + + + + Header for the If-Unmodified-Since condition. + + + + + Header for the blob content length. + + + + + Header for the blob type. + + + + + Header for snapshots. + + + + + Header to delete snapshots. + + + + + Header that specifies approximate message count of a queue. + + + + + Header that specifies blob caching control. + + + + + Header that specifies blob content encoding. + + + + + Header that specifies blob content language. + + + + + Header that specifies blob content MD5. + + + + + Header that specifies blob content type. + + + + + Header that specifies blob content length. + + + + + Header that specifies lease ID. + + + + + Header that specifies lease status. + + + + + Header that specifies lease status. + + + + + Header that specifies page write mode. + + + + + Header that specifies the date. + + + + + Header indicating the request ID. + + + + + Header indicating the client request ID. + + + + + Header that specifies public access to blobs. + + + + + Format string for specifying ranges. + + + + + Current storage version header value. + Every time this version changes, assembly version needs to be updated as well. + + + + + Specifies the page blob type. + + + + + Specifies the block blob type. + + + + + Specifies only snapshots are to be included. + + + + + Specifies snapshots are to be included. + + + + + Header that specifies the pop receipt for a message. + + + + + Header that specifies the next visible time for a message. + + + + + Header that specifies the lease action to perform. + + + + + Header that specifies the proposed lease ID for a leasing operation. + + + + + Header that specifies the duration of a lease. + + + + + Header that specifies the break period of a lease. + + + + + Header that specifies the remaining lease time. + + + + + Header that specifies the key name for explicit keys. + + + + + Header that specifies the copy ID. + + + + + Header that specifies the copy last modified time. + + + + + Header that specifies the copy status. + + + + + Header that specifies the copy progress. + + + + + Header that specifies a copy error message. + + + + + Header that specifies the copy action. + + + + + The value of the copy action header that signifies an abort operation. + + + + + Constants for query strings. + + + + + Query component for snapshot time. + + + + + Query component for the signed SAS start time. + + + + + Query component for the signed SAS expiry time. + + + + + Query component for the signed SAS resource. + + + + + Query component for the SAS table name. + + + + + Query component for the signed SAS permissions. + + + + + Query component for the SAS start partition key. + + + + + Query component for the SAS start row key. + + + + + Query component for the SAS end partition key. + + + + + Query component for the SAS end row key. + + + + + Query component for the signed SAS identifier. + + + + + Query component for the signing SAS key. + + + + + Query component for the signed SAS version. + + + + + Query component for SAS signature. + + + + + Query component for message time-to-live. + + + + + Query component for message visibility timeout. + + + + + Query component for the number of messages. + + + + + Query component for message pop receipt. + + + + + Query component for resource type. + + + + + Query component for the operation (component) to access. + + + + + Query component for the copy ID. + + + + + Constants for Result Continuations + + + + + Top Element for Continuation Tokens + + + + + XML element for the next marker. + + + + + XML element for the next partition key. + + + + + XML element for the next row key. + + + + + XML element for the next table name. + + + + + XML element for the token version. + + + + + Stores the current token version value. + + + + + XML element for the token type. + + + + + Enumeration representing the state of logging in a service. + + + + + Logging is disabled. + + + + + Log read operations. + + + + + Log write operations. + + + + + Log delete operations. + + + + + Log all operations. + + + + + Class representing the service properties pertaining to logging. + + + + + Gets or sets the version of the analytics service. + + A string identifying the version of the service. + + + + Gets or sets the state of logging. + + A combination of flags describing the operations that are logged. + + + + Gets or sets the logging retention policy. + + The number of days to retain the logs. + + + + Enumeration representing the state of metrics collection in a service. + + + + + Metrics collection is disabled. + + + + + Service-level metrics collection is enabled. + + + + + Service-level and API metrics collection are enabled. + + + + + Class representing the service properties pertaining to metrics. + + + + + Gets or sets the version of the analytics service. + + A string identifying the version of the service. + + + + Gets or sets the state of metrics collection. + + A value indicating which metrics to collect, if any. + + + + Gets or sets the logging retention policy. + + The number of days to retain the logs. + + + + Writes a collection of shared access policies to the specified stream in XML format. + + A collection of shared access policies. + An output stream. + A delegate that writes a policy to an XML writer. + The type of policy to write. + + + + Gets the request id. + + The response from server. + The request ID. + + + + Reads a collection of shared access policies from the specified object. + + A collection of shared access policies to be filled. + A policy response object for reading the stream. + The type of policy to read. + + + + Parses the metadata. + + The reader. + A of metadata. + + Precondition: reader at <Metadata> + Postcondition: reader after </Metadata> (<Metadata/> consumed) + + + + + Class representing a set of properties pertaining to a cloud storage service. + + + + + The name of the root XML element. + + + + + The name of the logging XML element. + + + + + The name of the metrics XML element. + + + + + The name of the version XML element. + + + + + The name of the delete operation XML element. + + + + + The name of the read operation XML element. + + + + + The name of the write operation XML element. + + + + + The name of the retention policy XML element. + + + + + The name of the enabled XML element. + + + + + The name of the days XML element. + + + + + The name of the include APIs XML element. + + + + + The name of the default service version XML element. + + + + + Initializes a new instance of the ServiceProperties class. + + + + + Constructs a ServiceProperties object from an XML document received from the service. + + The XML document. + A ServiceProperties object containing the properties in the XML document. + + + + Converts these properties into XML for communicating with the service. + + An XML document containing the service properties. + + + + Generates XML representing the given retention policy. + + The number of days to retain, or null if the policy is disabled. + An XML retention policy element. + + + + Generates XML representing the given metrics properties. + + The metrics properties. + An XML metrics element. + + + + Generates XML representing the given logging properties. + + The logging properties. + An XML logging element. + + + + Constructs a LoggingProperties object from an XML element. + + The XML element. + A LoggingProperties object containing the properties in the element. + + + + Constructs a MetricsProperties object from an XML element. + + The XML element. + A MetricsProperties object containing the properties in the element. + + + + Constructs a retention policy (number of days) from an XML element. + + The XML element. + The number of days to retain, or null if retention is disabled. + + + + Writes service properties to a stream, formatted in XML. + + The stream to which the formatted properties are to be written. + + + + Gets or sets the logging properties. + + The logging properties. + + + + Gets or sets the metrics properties. + + The metrics properties. + + + + Gets or sets the default service version. + + The default service version identifier. + + + + Provides error code strings that are common to all storage services. + + + + + The specified HTTP verb is not supported. + + + + + The Content-Length header is required for this request. + + + + + A required header was missing. + + + + + A required XML node was missing. + + + + + One or more header values are not supported. + + + + + One or more XML nodes are not supported. + + + + + One or more header values are invalid. + + + + + One or more XML node values are invalid. + + + + + A required query parameter is missing. + + + + + One or more query parameters is not supported. + + + + + One or more query parameters are invalid. + + + + + One or more query parameters are out of range. + + + + + The URI is invalid. + + + + + The HTTP verb is invalid. + + + + + The metadata key is empty. + + + + + The request body is too large. + + + + + The specified XML document is invalid. + + + + + An internal error occurred. + + + + + Authentication failed. + + + + + The specified MD5 hash does not match the server value. + + + + + The specified MD5 hash is invalid. + + + + + The input is out of range. + + + + + The input is invalid. + + + + + The operation timed out. + + + + + The specified resource was not found. + + + + + The specified metadata is invalid. + + + + + The specified metadata is too large. + + + + + The specified condition was not met. + + + + + The specified range is invalid. + + + + + The specified container was not found. + + + + + The specified container already exists. + + + + + The specified container is disabled. + + + + + The specified container is being deleted. + + + + + The server is busy. + + + + diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Module.txt b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Module.txt new file mode 100644 index 000000000..c089a6eed --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Module.txt @@ -0,0 +1,12 @@ +Name: Orchard.AzureBlobStorage +AntiForgery: enabled +Author: The Orchard Team +Website: http://orchardproject.net +Version: 1.0 +OrchardVersion: 1.7 +Description: Description for the module +Features: + Orchard.AzureBlobStorage: + Description: Stores the files on Azure Blob Storage + Name: Azure Blob Storage + Category: Hosting \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Orchard.AzureBlobStorage.csproj b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Orchard.AzureBlobStorage.csproj new file mode 100644 index 000000000..8dcceaf32 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Orchard.AzureBlobStorage.csproj @@ -0,0 +1,139 @@ + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CBC7993C-57D8-4A6C-992C-19E849DFE71D} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Orchard.AzureBlobStorage + Orchard.AzureBlobStorage + v4.0 + false + + + 4.0 + + + false + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + False + ..\..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Configuration.dll + + + False + ..\..\..\..\lib\windowsazure\Microsoft.WindowsAzure.Storage.dll + + + + + 3.5 + + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll + + + + + + + + + + + + + + + + {2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6} + Orchard.Framework + + + {9916839C-39FC-4CEB-A5AF-89CA7E87119F} + Orchard.Core + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + $(ProjectDir)\..\Manifests + + + + + + + + + + + + False + True + 45979 + / + + + False + True + http://orchard.codeplex.com + False + + + + + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Properties/AssemblyInfo.cs b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..760d681e8 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Orchard.AzureBlobStorage")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("Orchard")] +[assembly: AssemblyCopyright("Copyright © Outercurve Foundation 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("bcd6a602-4041-4a40-af4f-82f3dc0ab136")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0")] +[assembly: AssemblyFileVersion("1.0")] + diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureBlobStorageProvider.cs b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureBlobStorageProvider.cs new file mode 100644 index 000000000..e88b3e6a9 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureBlobStorageProvider.cs @@ -0,0 +1,61 @@ +using System.IO; +using Microsoft.WindowsAzure; +using Orchard.Environment.Configuration; +using Orchard.Environment.Extensions; +using Orchard.FileSystems.Media; + +namespace Orchard.AzureBlobStorage.Services { + [OrchardSuppressDependency("Orchard.FileSystems.Media.FileSystemStorageProvider")] + public class AzureBlobStorageProvider : AzureFileSystem, IStorageProvider { + public AzureBlobStorageProvider(ShellSettings shellSettings, IMimeTypeProvider mimeTypeProvider) + : this(shellSettings, CloudConfigurationManager.GetSetting("StorageConnectionString"), mimeTypeProvider) { + } + + public AzureBlobStorageProvider(ShellSettings shellSettings, string storageConnectionString, IMimeTypeProvider mimeTypeProvider) : base("media", shellSettings.Name, false, storageConnectionString, mimeTypeProvider) { } + + public bool TrySaveStream(string path, Stream inputStream) { + try { + SaveStream(path, inputStream); + } + catch { + return false; + } + + return true; + } + + public void SaveStream(string path, Stream inputStream) { + // Create the file. + // The CreateFile method will map the still relative path + var file = CreateFile(path); + + using(var outputStream = file.OpenWrite()) { + var buffer = new byte[8192]; + for (;;) { + var length = inputStream.Read(buffer, 0, buffer.Length); + if (length <= 0) + break; + outputStream.Write(buffer, 0, length); + } + } + } + + /// + /// Retrieves the local path for a given url within the storage provider. + /// + /// The public url of the media. + /// The local path. + public string GetStoragePath(string url) { + if (url.StartsWith(_absoluteRoot)) { + return url.Substring(Combine(_absoluteRoot, "/").Length); + } + + return null; + } + + public string GetRelativePath(string path) { + return GetPublicUrl(path); + } + + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureFileSystem.cs b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureFileSystem.cs new file mode 100644 index 000000000..66611d29d --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/AzureFileSystem.cs @@ -0,0 +1,365 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Blob; +using Orchard.FileSystems.Media; + +namespace Orchard.AzureBlobStorage.Services { + public class AzureFileSystem { + private readonly IMimeTypeProvider _mimeTypeProvider; + public const string FolderEntry = "$$$ORCHARD$$$.$$$"; + + public string ContainerName { get; protected set; } + + private readonly CloudStorageAccount _storageAccount; + protected readonly string _root; + protected readonly string _absoluteRoot; + public CloudBlobClient BlobClient { get; private set; } + public CloudBlobContainer Container { get; private set; } + + public AzureFileSystem(string containerName, string root, bool isPrivate, string storageConnectionString, IMimeTypeProvider mimeTypeProvider) { + _mimeTypeProvider = mimeTypeProvider; + // Setup the connection to custom storage accountm, e.g. Development Storage + _storageAccount = CloudStorageAccount.Parse(storageConnectionString); + ContainerName = containerName; + _root = String.IsNullOrEmpty(root) ? "" : root + "/"; + _absoluteRoot = Combine(Combine(_storageAccount.BlobEndpoint.AbsoluteUri, containerName), root); + + BlobClient = _storageAccount.CreateCloudBlobClient(); + // Get and create the container if it does not exist + // The container is named with DNS naming restrictions (i.e. all lower case) + Container = BlobClient.GetContainerReference(ContainerName); + + Container.CreateIfNotExists(); + + Container.SetPermissions(isPrivate + ? new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Off } + : new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Container }); + + } + + private static string ConvertToRelativeUriPath(string path) { + var newPath = path.Replace(@"\", "/"); + + if (newPath.StartsWith("/") || newPath.StartsWith("http://") || newPath.StartsWith("https://")) + throw new ArgumentException("Path must be relative"); + + return newPath; + } + + public string Combine(string path1, string path2) { + if (path1 == null) { + throw new ArgumentNullException("path1"); + } + + if (path2 == null) { + throw new ArgumentNullException("path2"); + } + + if (String.IsNullOrEmpty(path2)) { + return path1; + } + + if (String.IsNullOrEmpty(path1)) { + return path2; + } + + if (path2.StartsWith("http://") || path2.StartsWith("https://")) { + return path2; + } + + var ch = path1[path1.Length - 1]; + + if (ch != '/') { + return (path1.TrimEnd('/') + '/' + path2.TrimStart('/')); + } + + return (path1 + path2); + } + + public IStorageFile GetFile(string path) { + + path = ConvertToRelativeUriPath(path); + + Container.EnsureBlobExists(String.Concat(_root, path)); + return new AzureBlobFileStorage(Container.GetBlockBlobReference(String.Concat(_root, path)), _absoluteRoot); + } + + public bool FileExists(string path) { + return Container.BlobExists(String.Concat(_root, path)); + } + + public bool FolderExists(string path) { + return Container.DirectoryExists(String.Concat(_root, path)); + } + + public IEnumerable ListFiles(string path) { + + path = path ?? String.Empty; + path = ConvertToRelativeUriPath(path); + + string prefix = Combine(Combine(Container.Name, _root), path); + + if (!prefix.EndsWith("/")) + prefix += "/"; + + return BlobClient.ListBlobs(prefix, true) + .OfType() + .Where(blobItem => !blobItem.Uri.AbsoluteUri.EndsWith(FolderEntry)) + .Select(blobItem => new AzureBlobFileStorage(blobItem, _absoluteRoot)) + .ToArray(); + } + + public IEnumerable ListFolders(string path) { + + path = path ?? String.Empty; + path = ConvertToRelativeUriPath(path); + + // return root folders + if (String.Concat(_root, path) == String.Empty) { + return Container.ListBlobs() + .OfType() + .Select(d => new AzureBlobFolderStorage(d, _absoluteRoot)) + .ToList(); + } + + if (!Container.DirectoryExists(String.Concat(_root, path))) { + try { + CreateFolder(path); + } + catch (Exception ex) { + throw new ArgumentException(string.Format("The folder could not be created at path: {0}. {1}", + path, ex)); + } + } + + return Container.GetDirectoryReference(String.Concat(_root, path)) + .ListBlobs() + .OfType() + .Select(d => new AzureBlobFolderStorage(d, _absoluteRoot)) + .ToList(); + } + + public bool TryCreateFolder(string path) { + try { + if (!Container.DirectoryExists(String.Concat(_root, path))) { + CreateFolder(path); + return true; + } + + // return false to be consistent with FileSystemProvider's implementation + return false; + } + catch { + return false; + } + } + + public void CreateFolder(string path) { + path = ConvertToRelativeUriPath(path); + Container.EnsureDirectoryDoesNotExist(String.Concat(_root, path)); + + // Creating a virtually hidden file to make the directory an existing concept + CreateFile(Combine(path, FolderEntry)); + + int lastIndex; + while ((lastIndex = path.LastIndexOf('/')) > 0) { + path = path.Substring(0, lastIndex); + if (!Container.DirectoryExists(String.Concat(_root, path))) { + CreateFile(Combine(path, FolderEntry)); + } + } + } + + public void DeleteFolder(string path) { + path = ConvertToRelativeUriPath(path); + + Container.EnsureDirectoryExists(String.Concat(_root, path)); + foreach (var blob in Container.GetDirectoryReference(String.Concat(_root, path)).ListBlobs()) { + if (blob is CloudBlockBlob) + ((CloudBlockBlob)blob).Delete(); + + if (blob is CloudBlobDirectory) + DeleteFolder(blob.Uri.ToString().Substring(Container.Uri.ToString().Length + 1 + _root.Length)); + } + } + + public void RenameFolder(string path, string newPath) { + path = ConvertToRelativeUriPath(path); + newPath = ConvertToRelativeUriPath(newPath); + + if (!path.EndsWith("/")) + path += "/"; + + if (!newPath.EndsWith("/")) + newPath += "/"; + foreach (var blob in Container.GetDirectoryReference(_root + path).ListBlobs()) { + if (blob is CloudBlockBlob) { + string filename = Path.GetFileName(blob.Uri.ToString()); + string source = String.Concat(path, filename); + string destination = String.Concat(newPath, filename); + RenameFile(source, destination); + } + + if (blob is CloudBlobDirectory) { + string foldername = blob.Uri.Segments.Last(); + string source = String.Concat(path, foldername); + string destination = String.Concat(newPath, foldername); + RenameFolder(source, destination); + } + } + } + + public void DeleteFile(string path) { + path = ConvertToRelativeUriPath(path); + + Container.EnsureBlobExists(Combine(_root, path)); + var blob = Container.GetBlockBlobReference(Combine(_root, path)); + blob.DeleteIfExists(); + } + + public void RenameFile(string path, string newPath) { + path = ConvertToRelativeUriPath(path); + newPath = ConvertToRelativeUriPath(newPath); + + Container.EnsureBlobExists(String.Concat(_root, path)); + Container.EnsureBlobDoesNotExist(String.Concat(_root, newPath)); + + var blob = Container.GetBlockBlobReference(String.Concat(_root, path)); + var newBlob = Container.GetBlockBlobReference(String.Concat(_root, newPath)); + newBlob.StartCopyFromBlob(blob); + } + + public IStorageFile CreateFile(string path) { + path = ConvertToRelativeUriPath(path); + + if (Container.BlobExists(String.Concat(_root, path))) { + throw new ArgumentException("File " + path + " already exists"); + } + + // create all folder entries in the hierarchy + int lastIndex; + var localPath = path; + while ((lastIndex = localPath.LastIndexOf('/')) > 0) { + localPath = localPath.Substring(0, lastIndex); + var folder = Container.GetBlockBlobReference(String.Concat(_root, Combine(localPath, FolderEntry))); + folder.OpenWrite().Dispose(); + } + + var blob = Container.GetBlockBlobReference(String.Concat(_root, path)); + var contentType = _mimeTypeProvider.GetMimeType(path); + if (!String.IsNullOrWhiteSpace(contentType)) { + blob.Properties.ContentType = contentType; + } + + blob.UploadFromStream(new MemoryStream(new byte[0])); + return new AzureBlobFileStorage(blob, _absoluteRoot); + } + + public string GetPublicUrl(string path) { + path = ConvertToRelativeUriPath(path); + + Container.EnsureBlobExists(String.Concat(_root, path)); + return Container.GetBlockBlobReference(String.Concat(_root, path)).Uri.ToString(); + } + + private class AzureBlobFileStorage : IStorageFile { + private CloudBlockBlob _blob; + private readonly string _rootPath; + + public AzureBlobFileStorage(CloudBlockBlob blob, string rootPath) { + _blob = blob; + _rootPath = rootPath; + } + + public string GetPath() { + return _blob.Uri.ToString().Substring(_rootPath.Length).Trim('/'); + } + + public string GetName() { + return Path.GetFileName(GetPath()); + } + + public long GetSize() { + return _blob.Properties.Length; + } + + public DateTime GetLastUpdated() { + return _blob.Properties.LastModified.GetValueOrDefault().DateTime; + } + + public string GetFileType() { + return Path.GetExtension(GetPath()); + } + + public Stream OpenRead() { + return _blob.OpenRead(); + } + + public Stream OpenWrite() { + return _blob.OpenWrite(); + } + + public Stream CreateFile() { + // as opposed to the File System implementation, if nothing is done on the stream + // the file will be emptied, because Azure doesn't implement FileMode.Truncate + _blob.DeleteIfExists(); + _blob = _blob.Container.GetBlockBlobReference(_blob.Uri.ToString()); + _blob.UploadFromStream(new MemoryStream(new byte[0])); + + return OpenWrite(); + } + } + + private class AzureBlobFolderStorage : IStorageFolder { + private readonly CloudBlobDirectory _blob; + private readonly string _rootPath; + + public AzureBlobFolderStorage(CloudBlobDirectory blob, string rootPath) { + _blob = blob; + _rootPath = rootPath; + } + + public string GetName() { + var path = GetPath(); + return path.Substring(path.LastIndexOf('/') + 1); + } + + public string GetPath() { + return _blob.Uri.ToString().Substring(_rootPath.Length).Trim('/'); + } + + public long GetSize() { + return GetDirectorySize(_blob); + } + + public DateTime GetLastUpdated() { + return DateTime.MinValue; + } + + public IStorageFolder GetParent() { + if (_blob.Parent != null) { + return new AzureBlobFolderStorage(_blob.Parent, _rootPath); + } + throw new ArgumentException("Directory " + _blob.Uri + " does not have a parent directory"); + } + + private static long GetDirectorySize(CloudBlobDirectory directoryBlob) { + long size = 0; + + foreach (var blobItem in directoryBlob.ListBlobs()) { + if (blobItem is CloudBlockBlob) + size += ((CloudBlockBlob)blobItem).Properties.Length; + + if (blobItem is CloudBlobDirectory) + size += GetDirectorySize((CloudBlobDirectory)blobItem); + } + + return size; + } + } + + } +} diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/CloudBlobContainerExtensions.cs b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/CloudBlobContainerExtensions.cs new file mode 100644 index 000000000..c94e98c02 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Services/CloudBlobContainerExtensions.cs @@ -0,0 +1,54 @@ +using System; +using System.Linq; +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Blob; + +namespace Orchard.AzureBlobStorage.Services { + public static class CloudBlobContainerExtensions { + + public static bool BlobExists(this CloudBlobContainer container, string path) { + if (String.IsNullOrEmpty(path) || path.Trim() == String.Empty) + throw new ArgumentException("Path can't be empty"); + + try { + var blob = container.GetBlockBlobReference(path); + blob.FetchAttributes(); + return true; + } + catch (StorageException) { + return false; + } + } + + public static void EnsureBlobExists(this CloudBlobContainer container, string path) { + if (!BlobExists(container, path)) { + throw new ArgumentException("File " + path + " does not exist"); + } + } + + public static void EnsureBlobDoesNotExist(this CloudBlobContainer container, string path) { + if (BlobExists(container, path)) { + throw new ArgumentException("File " + path + " already exists"); + } + } + + public static bool DirectoryExists(this CloudBlobContainer container, string path) { + if (String.IsNullOrEmpty(path) || path.Trim() == String.Empty) + throw new ArgumentException("Path can't be empty"); + + return container.GetDirectoryReference(path).ListBlobs().Any(); + } + + public static void EnsureDirectoryExists(this CloudBlobContainer container, string path) { + if (!DirectoryExists(container, path)) { + throw new ArgumentException("Directory " + path + " does not exist"); + } + } + + public static void EnsureDirectoryDoesNotExist(this CloudBlobContainer container, string path) { + if (DirectoryExists(container, path)) { + throw new ArgumentException("Directory " + path + " already exists"); + } + } + } +} diff --git a/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Web.config b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Web.config new file mode 100644 index 000000000..88ddc0ef0 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.AzureBlobStorage/Web.config @@ -0,0 +1,41 @@ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.sln b/src/Orchard.sln index 702f04eac..b5a85db51 100644 --- a/src/Orchard.sln +++ b/src/Orchard.sln @@ -160,6 +160,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Upgrade", "Orchard.Web\Modu EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules.Deprecated", "Modules.Deprecated", "{902528F6-1444-42A3-8B75-A54B775B539C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.AzureBlobStorage", "Orchard.Web\Modules\Orchard.AzureBlobStorage\Orchard.AzureBlobStorage.csproj", "{CBC7993C-57D8-4A6C-992C-19E849DFE71D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CodeCoverage|Any CPU = CodeCoverage|Any CPU @@ -888,6 +890,16 @@ Global {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.FxCop|Any CPU.Build.0 = Release|Any CPU {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.Build.0 = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.Coverage|Any CPU.ActiveCfg = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.Coverage|Any CPU.Build.0 = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.FxCop|Any CPU.ActiveCfg = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.FxCop|Any CPU.Build.0 = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBC7993C-57D8-4A6C-992C-19E849DFE71D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -945,6 +957,7 @@ Global {73A7688A-5BD3-4F7E-ADFA-CE36C5A10E3B} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {6E444FF1-A47C-4CF6-BB3F-507C8EBD776D} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} + {CBC7993C-57D8-4A6C-992C-19E849DFE71D} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} @@ -960,8 +973,8 @@ Global {34BE9011-A5A9-49DD-9E53-C3D5CA7D7CE3} = {3E10BF6D-ADA5-417D-B36C-EBB0660B475E} {AC4402A1-61C4-4229-B840-FB1777DAE10C} = {3E10BF6D-ADA5-417D-B36C-EBB0660B475E} {137906EA-15FE-4AD8-A6A0-27528F0477D6} = {902528F6-1444-42A3-8B75-A54B775B539C} - {D9A7B330-CD22-4DA1-A95A-8DE1982AD8EB} = {902528F6-1444-42A3-8B75-A54B775B539C} {43D0EC0B-1955-4566-8D31-7B9102DA1703} = {902528F6-1444-42A3-8B75-A54B775B539C} {966EC390-3C7F-4D98-92A6-F0F30D02E9B1} = {902528F6-1444-42A3-8B75-A54B775B539C} + {D9A7B330-CD22-4DA1-A95A-8DE1982AD8EB} = {902528F6-1444-42A3-8B75-A54B775B539C} EndGlobalSection EndGlobal