From 23d98b3572888eaeb294d729976f7e6877e27120 Mon Sep 17 00:00:00 2001 From: veudayab Date: Wed, 2 Apr 2014 11:10:19 -0700 Subject: [PATCH] Version 3.1.0.1 --- Lib/Common/Blob/CloudBlobContainer.Common.cs | 4 +- Lib/Common/Blob/CloudBlockBlob.Common.cs | 4 +- Lib/Common/Blob/CloudPageBlob.Common.cs | 4 +- Lib/Common/Queue/CloudQueue.Common.cs | 15 ++- Lib/Common/Shared/Protocol/Constants.cs | 2 +- Lib/Common/Table/CloudTable.Common.cs | 43 ++++++- Lib/WindowsAzure.Storage-Preview.nuspec | 2 +- Lib/WindowsDesktop/Properties/AssemblyInfo.cs | 4 +- .../WindowsAzure.Storage.nuspec | 3 +- Lib/WindowsPhone/Properties/AssemblyInfo.cs | 4 +- Lib/WindowsRuntime/Properties/AssemblyInfo.cs | 4 +- .../Properties/AssemblyInfo.cs | 4 +- .../WindowsAzure.Storage.Table-Preview.nuspec | 4 +- Test/ClassLibraryCommon/Blob/SASTests.cs | 109 ++++++++++++++++++ .../Queue/CloudQueueTest.cs | 34 ++++++ .../Table/SAS/TableSasUnitTests.cs | 44 ++++++- .../WindowsDesktop/Properties/AssemblyInfo.cs | 4 +- Test/WindowsPhone/Properties/AssemblyInfo.cs | 4 +- .../WindowsRuntime/Properties/AssemblyInfo.cs | 4 +- changelog.txt | 9 +- 20 files changed, 276 insertions(+), 29 deletions(-) diff --git a/Lib/Common/Blob/CloudBlobContainer.Common.cs b/Lib/Common/Blob/CloudBlobContainer.Common.cs index ad994c191..e94821949 100644 --- a/Lib/Common/Blob/CloudBlobContainer.Common.cs +++ b/Lib/Common/Blob/CloudBlobContainer.Common.cs @@ -95,7 +95,9 @@ internal CloudBlobContainer(BlobContainerProperties properties, IDictionary(); this.EncodeMessage = true; } @@ -244,6 +246,17 @@ private CloudQueueMessage SelectPeekMessageResponse(QueueMessage protocolMessage return message; } + /// + /// Returns a shared access signature for the queue. + /// + /// A object specifying the access policy for the shared access signature. + /// A shared access signature, as a URI query string. + /// The query string returned includes the leading question mark. + public string GetSharedAccessSignature(SharedAccessQueuePolicy policy) + { + return this.GetSharedAccessSignature(policy, null /* accessPolicyIdentifier */, null /* sasVersion */); + } + /// /// Returns a shared access signature for the queue. /// diff --git a/Lib/Common/Shared/Protocol/Constants.cs b/Lib/Common/Shared/Protocol/Constants.cs index 6d05daf29..a70cd1358 100644 --- a/Lib/Common/Shared/Protocol/Constants.cs +++ b/Lib/Common/Shared/Protocol/Constants.cs @@ -709,7 +709,7 @@ static HeaderConstants() /// /// Specifies the value to use for UserAgent header. /// - public const string UserAgentProductVersion = "3.1.0"; + public const string UserAgentProductVersion = "3.1.0.1"; /// /// Master Windows Azure Storage header prefix. diff --git a/Lib/Common/Table/CloudTable.Common.cs b/Lib/Common/Table/CloudTable.Common.cs index d61eb1205..6025b6e86 100644 --- a/Lib/Common/Table/CloudTable.Common.cs +++ b/Lib/Common/Table/CloudTable.Common.cs @@ -78,9 +78,11 @@ internal CloudTable(string tableName, CloudTableClient client) { CommonUtility.AssertNotNull("tableName", tableName); CommonUtility.AssertNotNull("client", client); - this.Name = tableName; this.StorageUri = NavigationHelper.AppendPathToUri(client.StorageUri, tableName); this.ServiceClient = client; + + // Set the relativized name from the URI. + this.Name = NavigationHelper.GetTableNameFromUri(this.Uri, this.ServiceClient.UsePathStyleUris); } /// @@ -113,6 +115,45 @@ public Uri Uri /// An object of type containing the table's URIs for both the primary and secondary locations. public StorageUri StorageUri { get; private set; } + /// + /// Returns a shared access signature for the table. + /// + /// A object specifying the access policy for the shared access signature. + /// A shared access signature, as a URI query string. + /// The query string returned includes the leading question mark. + /// Thrown if the current credentials don't support creating a shared access signature. + public string GetSharedAccessSignature(SharedAccessTablePolicy policy) + { + return this.GetSharedAccessSignature( + policy, + null /* accessPolicyIdentifier */, + null /* startPartitionKey */, + null /* startRowKey */, + null /* endPartitionKey */, + null /* endRowKey */, + null /* sasVersion */); + } + + /// + /// Returns a shared access signature for the table. + /// + /// A object specifying the access policy for the shared access signature. + /// A string identifying a stored access policy. + /// A shared access signature, as a URI query string. + /// The query string returned includes the leading question mark. + /// Thrown if the current credentials don't support creating a shared access signature. + public string GetSharedAccessSignature(SharedAccessTablePolicy policy, string accessPolicyIdentifier) + { + return this.GetSharedAccessSignature( + policy, + accessPolicyIdentifier, + null /* startPartitionKey */, + null /* startRowKey */, + null /* endPartitionKey */, + null /* endRowKey */, + null /* sasVersion */); + } + /// /// Returns a shared access signature for the table. /// diff --git a/Lib/WindowsAzure.Storage-Preview.nuspec b/Lib/WindowsAzure.Storage-Preview.nuspec index a254da420..abfe92294 100644 --- a/Lib/WindowsAzure.Storage-Preview.nuspec +++ b/Lib/WindowsAzure.Storage-Preview.nuspec @@ -2,7 +2,7 @@ WindowsAzure.Storage-Preview - 3.1.0.0-preview + 3.1.0.1-preview Windows Azure Storage Microsoft Microsoft diff --git a/Lib/WindowsDesktop/Properties/AssemblyInfo.cs b/Lib/WindowsDesktop/Properties/AssemblyInfo.cs index 18bb1f666..20f90cb69 100644 --- a/Lib/WindowsDesktop/Properties/AssemblyInfo.cs +++ b/Lib/WindowsDesktop/Properties/AssemblyInfo.cs @@ -34,8 +34,8 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] #if SIGN [assembly: InternalsVisibleTo( diff --git a/Lib/WindowsDesktop/WindowsAzure.Storage.nuspec b/Lib/WindowsDesktop/WindowsAzure.Storage.nuspec index 23f0fdc72..ac9076792 100644 --- a/Lib/WindowsDesktop/WindowsAzure.Storage.nuspec +++ b/Lib/WindowsDesktop/WindowsAzure.Storage.nuspec @@ -2,7 +2,7 @@ WindowsAzure.Storage - 3.1.0.0 + 3.1.0.1 Windows Azure Storage Microsoft Microsoft @@ -25,7 +25,6 @@ Windows Azure Storage team's blog - http://blogs.msdn.com/b/windowsazurestorage/ - diff --git a/Lib/WindowsPhone/Properties/AssemblyInfo.cs b/Lib/WindowsPhone/Properties/AssemblyInfo.cs index 07d54fbeb..0e1d4e8bf 100644 --- a/Lib/WindowsPhone/Properties/AssemblyInfo.cs +++ b/Lib/WindowsPhone/Properties/AssemblyInfo.cs @@ -32,8 +32,8 @@ // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] [assembly: NeutralResourcesLanguageAttribute("en-US")] #if SIGN diff --git a/Lib/WindowsRuntime/Properties/AssemblyInfo.cs b/Lib/WindowsRuntime/Properties/AssemblyInfo.cs index bb41a9f7e..c8fced066 100644 --- a/Lib/WindowsRuntime/Properties/AssemblyInfo.cs +++ b/Lib/WindowsRuntime/Properties/AssemblyInfo.cs @@ -25,8 +25,8 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] [assembly: ComVisible(false)] #if SIGN diff --git a/Lib/WindowsRuntimeTable/Properties/AssemblyInfo.cs b/Lib/WindowsRuntimeTable/Properties/AssemblyInfo.cs index 6b47163e3..953ec2a83 100644 --- a/Lib/WindowsRuntimeTable/Properties/AssemblyInfo.cs +++ b/Lib/WindowsRuntimeTable/Properties/AssemblyInfo.cs @@ -25,8 +25,8 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] [assembly: ComVisible(false)] #if SIGN diff --git a/Lib/WindowsRuntimeTable/WindowsAzure.Storage.Table-Preview.nuspec b/Lib/WindowsRuntimeTable/WindowsAzure.Storage.Table-Preview.nuspec index 81d518182..4526a9eb1 100644 --- a/Lib/WindowsRuntimeTable/WindowsAzure.Storage.Table-Preview.nuspec +++ b/Lib/WindowsRuntimeTable/WindowsAzure.Storage.Table-Preview.nuspec @@ -2,7 +2,7 @@ WindowsAzure.Storage.Table-Preview - 3.1.0.0-preview + 3.1.0.1-preview Windows Azure Storage Tables Extension for Windows Runtime Microsoft Microsoft @@ -16,7 +16,7 @@ Windows Azure Storage team's blog - http://blogs.msdn.com/b/windowsazurestorage/ A table extension library for Windows Runtime for working with Windows Azure Storage tables. Microsoft, Azure, Storage, Table, Scalable, winrt, windowsazureofficial - + diff --git a/Test/ClassLibraryCommon/Blob/SASTests.cs b/Test/ClassLibraryCommon/Blob/SASTests.cs index 0e357f74e..9fb83cee9 100644 --- a/Test/ClassLibraryCommon/Blob/SASTests.cs +++ b/Test/ClassLibraryCommon/Blob/SASTests.cs @@ -186,6 +186,41 @@ private static void TestBlobSAS(ICloudBlob testBlob, SharedAccessBlobPermissions TestAccess(sasToken, permissions, headers, null, testBlob); } + [TestMethod] + [Description("Test SAS with absolute Uri")] + [TestCategory(ComponentCategory.Blob)] + [TestCategory(TestTypeCategory.UnitTest)] + [TestCategory(SmokeTestCategory.NonSmoke)] + [TestCategory(TenantTypeCategory.DevStore), TestCategory(TenantTypeCategory.DevFabric), TestCategory(TenantTypeCategory.Cloud)] + public void CloudBlobContainerSASWithAbsoluteUri() + { + CloudBlobClient blobClient = GenerateCloudBlobClient(); + + CloudBlobContainer container = blobClient.GetContainerReference(blobClient.BaseUri + GetRandomContainerName()); + try + { + container.CreateIfNotExists(); + + SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy() + { + Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write, + SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5), + SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(10) + }; + + string sasToken = container.GetSharedAccessSignature(policy); + StorageCredentials creds = new StorageCredentials(sasToken); + + CloudBlobContainer sasContainer = new CloudBlobContainer(container.Uri, creds); + CloudBlockBlob testBlockBlob = sasContainer.GetBlockBlobReference("blockblob"); + UploadText(testBlockBlob, "blob", Encoding.UTF8); + } + finally + { + container.DeleteIfExists(); + } + } + [TestMethod] [Description("Test updateSASToken")] [TestCategory(ComponentCategory.Blob)] @@ -556,5 +591,79 @@ public void CloudPageBlobHeaders20120212SASVersion() Assert.AreEqual(SR.InvalidHeaders, e.Message); } } + + [TestMethod] + [Description("Test SAS with absolute Uri")] + [TestCategory(ComponentCategory.Blob)] + [TestCategory(TestTypeCategory.UnitTest)] + [TestCategory(SmokeTestCategory.NonSmoke)] + [TestCategory(TenantTypeCategory.DevStore), TestCategory(TenantTypeCategory.DevFabric), TestCategory(TenantTypeCategory.Cloud)] + public void CloudBlockBlobSASWithAbsoluteUri() + { + CloudBlobClient blobClient = GenerateCloudBlobClient(); + + CloudBlobContainer container = GetRandomContainerReference(); + try + { + container.CreateIfNotExists(); + + CloudBlockBlob testBlockBlob = container.GetBlockBlobReference(container.Uri + "/" + "blockblob"); + UploadText(testBlockBlob, "text", Encoding.UTF8); + + SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy() + { + Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write, + SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5), + SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(10) + }; + + string sasToken = testBlockBlob.GetSharedAccessSignature(policy); + StorageCredentials creds = new StorageCredentials(sasToken); + + CloudBlockBlob sasBlockBlob = new CloudBlockBlob(testBlockBlob.Uri, creds); + UploadText(sasBlockBlob, "new text", Encoding.UTF8); + } + finally + { + container.DeleteIfExists(); + } + } + + [TestMethod] + [Description("Test SAS with absolute Uri")] + [TestCategory(ComponentCategory.Blob)] + [TestCategory(TestTypeCategory.UnitTest)] + [TestCategory(SmokeTestCategory.NonSmoke)] + [TestCategory(TenantTypeCategory.DevStore), TestCategory(TenantTypeCategory.DevFabric), TestCategory(TenantTypeCategory.Cloud)] + public void CloudPageBlobSASWithAbsoluteUri() + { + CloudBlobClient blobClient = GenerateCloudBlobClient(); + + CloudBlobContainer container = GetRandomContainerReference(); + try + { + container.CreateIfNotExists(); + + CloudPageBlob testPageBlob = container.GetPageBlobReference(container.Uri + "/" + "pageblob"); + UploadText(testPageBlob, "text", Encoding.UTF8); + + SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy() + { + Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Write, + SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5), + SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(10) + }; + + string sasToken = testPageBlob.GetSharedAccessSignature(policy); + StorageCredentials creds = new StorageCredentials(sasToken); + + CloudPageBlob sasPageBlob = new CloudPageBlob(testPageBlob.Uri, creds); + UploadText(sasPageBlob, "new text", Encoding.UTF8); + } + finally + { + container.DeleteIfExists(); + } + } } } diff --git a/Test/ClassLibraryCommon/Queue/CloudQueueTest.cs b/Test/ClassLibraryCommon/Queue/CloudQueueTest.cs index acf89d4a5..3388c7eb2 100644 --- a/Test/ClassLibraryCommon/Queue/CloudQueueTest.cs +++ b/Test/ClassLibraryCommon/Queue/CloudQueueTest.cs @@ -1518,6 +1518,40 @@ public void CloudQueueOldSASVersion() } } + [TestMethod] + [Description("Test SAS with absolute Uri")] + [TestCategory(ComponentCategory.Blob)] + [TestCategory(TestTypeCategory.UnitTest)] + [TestCategory(SmokeTestCategory.NonSmoke)] + [TestCategory(TenantTypeCategory.DevStore), TestCategory(TenantTypeCategory.DevFabric), TestCategory(TenantTypeCategory.Cloud)] + public void CloudQueueSASWithAbsoluteUri() + { + CloudQueueClient queueClient = GenerateCloudQueueClient(); + + CloudQueue queue = queueClient.GetQueueReference(queueClient.BaseUri + GenerateNewQueueName()); + try + { + queue.CreateIfNotExists(); + + SharedAccessQueuePolicy policy = new SharedAccessQueuePolicy() + { + Permissions = SharedAccessQueuePermissions.Read, + SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5), + SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(10) + }; + + string sasToken = queue.GetSharedAccessSignature(policy); + StorageCredentials creds = new StorageCredentials(sasToken); + + CloudQueue sasQueue = new CloudQueue(queue.Uri, creds); + sasQueue.PeekMessage(); + } + finally + { + queue.DeleteIfExists(); + } + } + #region Test Helpers internal static void AssertPermissionsEqual(QueuePermissions permissions1, QueuePermissions permissions2) { diff --git a/Test/ClassLibraryCommon/Table/SAS/TableSasUnitTests.cs b/Test/ClassLibraryCommon/Table/SAS/TableSasUnitTests.cs index a1aa7f3a3..11f5daa35 100644 --- a/Test/ClassLibraryCommon/Table/SAS/TableSasUnitTests.cs +++ b/Test/ClassLibraryCommon/Table/SAS/TableSasUnitTests.cs @@ -1105,7 +1105,7 @@ public void TableUpdateSasTestSync() Permissions = SharedAccessTablePermissions.Delete, }; - string sasToken = table.GetSharedAccessSignature(policy, null, null, null, null, null); + string sasToken = table.GetSharedAccessSignature(policy); StorageCredentials creds = new StorageCredentials(sasToken); CloudTable sasTable = new CloudTable(table.Uri, creds); TestHelper.ExpectedException( @@ -1122,7 +1122,7 @@ public void TableUpdateSasTestSync() Permissions = SharedAccessTablePermissions.Delete | SharedAccessTablePermissions.Add, }; - string sasToken2 = table.GetSharedAccessSignature(policy2, null, null, null, null, null); + string sasToken2 = table.GetSharedAccessSignature(policy2); creds.UpdateSASToken(sasToken2); sasTable = new CloudTable(table.Uri, creds); @@ -1165,7 +1165,7 @@ public void TableSasUriTestSync() Permissions = SharedAccessTablePermissions.Delete, }; - string sasToken = table.GetSharedAccessSignature(policy, null, null, null, null, null); + string sasToken = table.GetSharedAccessSignature(policy); StorageCredentials creds = new StorageCredentials(sasToken); CloudStorageAccount sasAcc = new CloudStorageAccount(creds, new Uri(TestBase.TargetTenantConfig.BlobServiceEndpoint), new Uri(TestBase.TargetTenantConfig.QueueServiceEndpoint), new Uri(TestBase.TargetTenantConfig.TableServiceEndpoint)); CloudTableClient client = sasAcc.CreateCloudTableClient(); @@ -1181,6 +1181,44 @@ public void TableSasUriTestSync() table.DeleteIfExists(); } } + + [TestMethod] + [Description("Test SAS with absolute Uri")] + [TestCategory(ComponentCategory.Blob)] + [TestCategory(TestTypeCategory.UnitTest)] + [TestCategory(SmokeTestCategory.NonSmoke)] + [TestCategory(TenantTypeCategory.DevStore), TestCategory(TenantTypeCategory.DevFabric), TestCategory(TenantTypeCategory.Cloud)] + public void CloudTableSASWithAbsoluteUri() + { + CloudTableClient tableClient = GenerateCloudTableClient(); + + CloudTable table = tableClient.GetTableReference(tableClient.BaseUri + GenerateRandomTableName()); + try + { + table.CreateIfNotExists(); + + BaseEntity entity = new BaseEntity("PK", "RK"); + table.Execute(TableOperation.Insert(entity)); + + SharedAccessTablePolicy policy = new SharedAccessTablePolicy() + { + Permissions = SharedAccessTablePermissions.Delete, + SharedAccessStartTime = DateTimeOffset.UtcNow.AddMinutes(-5), + SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(10) + }; + + string sasToken = table.GetSharedAccessSignature(policy); + StorageCredentials creds = new StorageCredentials(sasToken); + + CloudTable sasTable = new CloudTable(table.Uri, creds); + sasTable.Execute(TableOperation.Delete(entity)); + } + finally + { + table.DeleteIfExists(); + } + } + #endregion #region Test Helpers diff --git a/Test/WindowsDesktop/Properties/AssemblyInfo.cs b/Test/WindowsDesktop/Properties/AssemblyInfo.cs index dd82a418b..00935b79e 100644 --- a/Test/WindowsDesktop/Properties/AssemblyInfo.cs +++ b/Test/WindowsDesktop/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] diff --git a/Test/WindowsPhone/Properties/AssemblyInfo.cs b/Test/WindowsPhone/Properties/AssemblyInfo.cs index c379b9153..c1f7457ea 100644 --- a/Test/WindowsPhone/Properties/AssemblyInfo.cs +++ b/Test/WindowsPhone/Properties/AssemblyInfo.cs @@ -32,6 +32,6 @@ // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] [assembly: NeutralResourcesLanguageAttribute("en-US")] diff --git a/Test/WindowsRuntime/Properties/AssemblyInfo.cs b/Test/WindowsRuntime/Properties/AssemblyInfo.cs index b2c52820c..95ba28202 100644 --- a/Test/WindowsRuntime/Properties/AssemblyInfo.cs +++ b/Test/WindowsRuntime/Properties/AssemblyInfo.cs @@ -22,5 +22,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] diff --git a/changelog.txt b/changelog.txt index 78a99219e..dfdaf75c6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -200,4 +200,11 @@ Issues fixed in 3.0.3.0 : Issues fixed in 3.1.0.0 : - - All: Added the ability to choose which SAS Version to use when generating Shared Access Signatures (either the 2012-02-12 or 2013-08-15 versions). \ No newline at end of file + - All: Added the ability to choose which SAS Version to use when generating Shared Access Signatures (either the 2012-02-12 or 2013-08-15 versions). + +Issues fixed in 3.1.0.1 : + + - All: Fixed an issue that was causing the Cloud{BlobContainer|Queue|Table|BlockBlob|PageBlob} names to be set incorrectly when the absolute Uri was passed to the Get{Container|Queue|Table|BlockBlob|PageBlob}Reference methods. This also ensures that the SharedAccessSignature which includes the canonicalized names of these resources is calculated correctly. + - All: Removed the System.Data.Services.Client dependency from the Nuget package. + - Queues: Added an overload to GetSharedAccessSignature that takes only the SharedAccessQueuePolicy in CloudQueue. + - Tables: Added an overload to GetSharedAccessSignature that takes only the SharedAccessTablePolicy and an overload that takes the SharedAccessTablePolicy and an accessPolicyIndentifier string in CloudTable.