forked from Azure/azure-storage-net
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
573 lines (467 loc) · 47.2 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
Changes in 9.3.1:
- Blob: Fixed a bug introduced with the blob creation time property, where cultures other than en-US would fail to parse blob headers.
- Table: Fixed a bug in parsing responses from the Table service that could cause hangs or deadlocks in certain situations.
Changes in 9.3.0:
- All: Support for 2018-03-28 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 5.6.
- Blob: Added support for put block using a source URI and range.
- Table: Address GitHub Issue #671, regarding serialization performance.
- Blob: Added support for static website properties.
- Blob: Added support for GetAccountProperties on blobs, blob containers, and blob clients.
- Desktop: Disabled Pipelining on HttpWebRequests.
Changes in 9.2.0:
- All: Support for 2017-11-09 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 5.5.
- Blobs: Added support for blob creation time property.
- Blobs: Added support for blob container immutability and legal hold policies.
- Blob/Queue: Added OAuth token support for authentication. Please note that this feature is available in preview.
- All (Desktop): Added support for specifying Proxy on OperationContext, for per-request proxy scenarios.
Changes in 9.1.1:
- Table: Updated Table related APIs to use the default Json Serializer settings.
- Table: Fixed a bug introduced after OData dependencies were removed, where support for double.NaN, double.PositiveInfinity and double.NegativeInfinity were lost.
Changes in 9.1.0:
- All: Updated Get*BlobReference APIs to inherit the existing ServiceClient instance.
- All: Removed the un-necessary stream wrapping when progress tracking is not requested.
- Blob(RT/NetCore): Removed Task.Run from CloudBlob Undelete API.
Changes in 9.0.0:
- All: Support for 2017-07-29 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 5.3.
- Tables: Removed dependencies on OData libraries.
- Table: Added full async parsing to APIs.
- Blobs : Added support for soft delete feature. If a delete retention policy is enabled through the set service properties API, then blobs or snapshots can be deleted softly and retained for a specified number of days, before being permanently removed by garbage collection.
- Queues: Added support for infinite TTL on queue messages.
- All: When a storage request fails, the error code may now be retrieved directly from the RequestResult and StorageException classes. This error code is populated even in cases where there is no ExtendedErrorInformation available, such as in calls to FetchAttributes.
- All: Upgarded NewtonSoft.json dependency to 10.0.2.
- All: Upgraded Netstandard dependency to 1.6.1.
- All (RT/NetCore): Improved performance by avoiding Task.Run
- Blobs (RT/NetCore): Fixed an infinite loop bug for StartCopyAsync API on PageBlob.
Changes in 8.7.0:
- Blobs: Parsing the snapshot parameter when creating a CloudBlockBlob from a URI is now case insensitive
- Blobs (Desktop): Added a new API supporting downloading a blob to a file by making concurrent service requests.
- Blobs (Desktop): Fixed a race-condition where cancelling a blob upload could result in deadlock.
- Blobs: Fixed StorageException when storing encrypted blobs with Formatting.Indented set in default JsonSerializerSettings.
- Blobs/Files: Added support for progress notification in async upload and download APIs.
Changes in 8.6.0 :
- Tables : Added support for Byte type property in TableEntity Flatten/ConvertBack methods.
- Blobs : Added support for the last time blobTier was modified.
Changes in 8.5.0 :
- Files: Added support for creating the snapshot of a share. See the service documentation for more information on how to use this API.
Changes in 8.4.0 :
- BlockBlobs: For Blob Storage Accounts, added support for getting and setting the tier on a block blob.
- All: Added a property called CustomUserAgent to the OperationContext class to provide the option for users to prepend a customized value to the existing UserAgent header value.
Changes in 8.3.0 :
- All(Netstandard): Updated the hashing algorithm to IncrementalHash instead of the original method which required buffering the data for MD5 calculations.
- All: Fixed a race condition in the resume-download logic where a failure during downloads could lead to corrupted data.
- Tables: Removed dependencies on OData libraries. Added full async parsing to table API's.
Changes in 8.2.1 :
- All: Fixed a bug where empty metadata headers would lead to an infinite loop when trying to list blobs on a container.
Changes in 8.2.0 :
- All: Support for 2017-04-17 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 5.2.
- Files: Added support for server side encryption.
- PageBlobs: For Premium Accounts only, added support for getting and setting the tier on a page blob. The tier can also be set when creating or copying from an existing page blob.
- Tables (NetCore): Fixed a bug where the empty etag added to the table delete operation would throw an exception on Xamarin/Mono.
- All: Fixed a bug where calling OpenWrite with an IfNotExists access condition on an existing block blob only fails when the blob is committed. Now it fails with error 409 as soon as OpenWrite is called.
- Files (WinRT/NetCore): Calling CreateIfNotExistsAsync on a root directory no longer throws the error 405. It returns false if the share exists, or throws 404 if not.
- All: Connection string support expanded to allow AccountName to be specified with SharedAccessSignature and DefaultEndpointsProtocol. In this case, SharedAccessSignature is used for credentials, while having both DefaultEndpointsProtocol and AccountName allows the library to infer a set of default endpoints. Additionally, we have added support for BlobSecondaryEndpoint, QueueSecondaryEndpoint, TableSecondaryEndpoint, and FileSecondaryEndpoint. Specifying a secondary endpoint requires the specification of the corresponding primary.
- All: The use of DefaultEndpointsProtocol in a connection string is now optional in the case where endpoints would be automatically generated; if missing, a value of https will be inferred. When the parsed account settings in such a case are used to generate a connection string, the value of DefaultEndpointsProtocol will be explicitly included.
- Tables: Added TableEntityAdapter<T> class to allow writing and reading simple or complex objects to Azure Table Storage without the need to implement ITableEntity interface or inherit from TableEntity class.
Changes in 8.1.4 :
- All (Desktop): Fixed a regression in the executor caused by disposing the SendStream during parallel operations.
Changes in 8.1.3 :
- Blobs (Desktop) : Fixed a bug where the MaximumExecutionTime was not honored, leading to infinite wait, if due to a failure, e.g., a network failure after receiving the response headers, server stopped sending partial response.
- All (Desktop) : Fixed a memory leak issue where the SendStream was not being disposed during retries, cancellations and Table Operations.
Changes in 8.1.1 :
- All (NetStandard/NetCore): Removed Microsoft.Data.Services.Client as a temporary fix to ODataLib dependency incompatibility with NetStandard.
Changes in 8.1.0 :
- All: Updated OData references to the latest Netstandard friendly package version 5.8.2.
- Queues (WinRT/NetCore): Fixed a bug where connections were not closed after an add message operation.
Changes in 8.0.1 :
- (NetStandard/Xamarin) : Fix for a break in Xamarin Apps with Streaming APIs caused by NotImplemented IncrementalHash APIs in Xamarin Runtime.
Changes in 8.0.0 :
- All: Support for 2016-05-31 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 4.6.
- All: (Desktop) Updated the desktop library to target .Net 4.5.0.
- All: Added a new Netstandard 1.0 Target Framework (facade) as PCL support.
- Blobs: Added large block blob upload support. The supported Blocks can now support sizes up to 100 MB.
- Blobs: Updated the default value for SingleBlobUploadThresholdInBytes from 32 MB to 128 MB.
- Blobs: Added a new, memory-optimized upload algorithm for UploadFrom* APIs. This strategy only applies for blocks greater than 4MB and when StoreBlobContentMD5 and Client-Side Encryption are disabled.
- All: Added Key Rotation support for Client Side Encryption.
- All: Fixed a race condition where calls to CreateIfNotExistsAsync and DeleteIfExistsAsync might never complete when the operation is canceled.
- Tables: Added Flattener/Recomposer APIs for writing complex objects to Azure Table Storage.
- Blobs: Fixed boundary checks for lease durations and break lease period to be in line with REST endpoints.
- Queues: Add Message now modifies the PopReceipt, Id, NextVisibleTime, InsertionTime, and ExpirationTime properties of its CloudQueueMessage parameter. The message can then be passed to the UpdateMessage and DeleteMessage APIs.
- PageBlobs: Added a new method that performs an incremental snapshot copy. See the service documentation for more information on how to use this API.
- Files: Prefix support for listing files and directories.
- Blobs: Created a new container attribute that stores the public access state of the container. This attribute is populated by FetchAttributes and in container listing operations.
- Blobs/Files: Populate content MD5 for range gets on Blobs and Files.
- Blobs/Files: Updated DownloadToFile to prevent reading of partially-written data while downloading.
- All: Added support for using Create/Delete and CreateIfNotExists/DeleteIfExists without read SAS permissions. CreateIfNotExists methods will now only do one REST call instead of two.
- Blobs: Fixed a bug with OpenWrite for BlockBlobs where Upload* APIs would fail due to lack of read SAS permissions.
- All: Decoupled StorageExtendedErrorInformation methods using OData to prevent the dependency from loading for Blobs, Queues, and Files.
- Tables: OData methods used to process the Extended Error Information for Table operations have now moved to its own static utility class - ODataErrorHelper.
- All: Added logging for the ExtendedErrorInformation 'ErrorMessage' attribute via StorageException ToString() method.
- All: Added the 'virtual' qualifier to Get*Reference APIs and unsealed Blob/Container/ShareResultSegment classes.
- All: Added the 'virtual' qualifier to numerous service call APIs.
- Blobs (WinRT/CoreCLR): Fixed a bug where the Content-Disposition header was not persisted when uploading a new blob.
- Table (CoreCLR): Fixed a bug where reflection-based Read/Write of TableEntity would throw for derived properties.
- Blobs/Files: Fixed a bug where creating Blob/Files would fail if Account SAS is present in the URI.
- Table: (WinRT/NetCore) Unsealed the TableQuery class.
- Table: Updated the access modifiers of "Entity" and "OperationType" properties of the TableOperation class from internal to public.
- All: Using a SAS token with a non-null 'api-version' parameter will cause an ArgumentException with a new clearer message indicating the unexpected parameter in the SAS token.
- Files: Changed Exists() calls on CloudFileDirectory objects to populate metadata. This was already being done for CloudFiles and CloudFileShares.
- All: (WinRT) Removed the static CloudStorageAccount.Create method. Please use the instance level consructor instead.
- Blobs: Removed the IAsyncOperation* overloads for GetPageRangesDiffAsync APIs.
- Tables: Numerous changes in Table Service error codes and messages.
- Blobs: Improved numerous Blob Service error codes and messages.
- Blobs: Fixed error for AcquireLease on non-existent container.
- PageBlobs: Fixed error response for GetPageRangesDiff.
- Blobs: Update in "If-None-Match: *" pre-condition behavior to fail for reads(previously disregarded by the service).
- Blobs: CreateIfNotExists calls on a Container will be logged by AppInsight as a failure if the container exists. The failure is ignored by the library and this change saves an extra service call in case the container doesn't exist.
Changes in 7.2.1 :
- All: Changes error handling in the case where Streams that are passed into the library have a specific bug. This case will no longer crash the AppDomain.
Changes in 7.2.0 :
- All (CoreCLR): NetStandard target framework changed to netstandard1.3
- All (PCL): Removed support for PCL in favor of NetStandard GA release
- Table (CoreCLR): Added a workaround for missing GetProperties method on TypeInfo in reflection-based Read/Write methods in TableEntity after change to netstandard11.3 TFM
- Table (CoreCLR): Added logic to wrap the error stream in a noncloseable stream to prevent it from being disposed by ODataMessageReader
Changes in 7.1.3-preview :
- All: CoreCLR projects were updated to use the RTM release of .Net Core 1.0
Changes in 7.1.2 :
- All: Support for 2015-12-11 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 4.4.
- Blobs: Added support for server-side encryption.
- All: Fixed a bug with ContinuationToken where empty TargetLocation resulted in an error in deserialization.
- Blobs/Tables/Queues: Bug fix and tests for running GetServiceStats with the incompatible PrimaryOnly location mode.
- All (WinRT): Fixed a bug where HttpClient default timeout caused unhandled TaskCancellation exceptions.
- All (CoreCLR): Updated the default AutomaticDecompression Method on StorageAuthenticationHttpHandler from Gzip | Deflate to None.
- Table (CoreCLR) : Fixed a bug where reading table entity properties returned only the declared properties.
Changes in 7.0.2-preview :
- Blobs (WinRT): Fixed a bug that caused DownloadToFile() to infinite loop for one overload.
- All : CoreCLR projects were updated to use the RC2 release of .Net Core 1.0
Changes in 7.0.0 :
- All: Support for 2015-07-08 REST version. Please see our REST API documentation and blogs for information about the related added features. If you are using the Storage Emulator, please update to Emulator version 4.3.
- All (WinRT): All apis now return Task objects instead of IAsync* objects. Please see our blog post for more info.
- All: Ensure disposal of CancellationTokenSource in StreamExtensions.WriteToAsync<T>.
- All: Virtualized all service call APIs and unsealed their classes.
- All: Updated the UserAgent string to match the Azure Storage standard.
- All: Windows Runtime no longer uses WrappedStorageExceptions or HResults. Catch StorageException and check HTTP status code instead.
- All: Changed use of HttpClient in Windows Runtime from instance-per-request to singleton instance shared across all requests.
- All: SetServiceProperties APIs no longer instantiates Logging, HourMetrics, MinuteMetrics, or Cors instance variables. New LoggingProperties, MetricsProperties, and CorsProperties objects will need to be set for those variables before they can be assigned.
- All: LoggingProperties and MetricsProperties Version now defaults to "1.0" or Constants.AnalyticsConstants.MetricsVersionV1 or LoggingVersionV1.
- All: Removed deprecated SharedKeyLiteAuthenticationHandler, use SharedKeyAuthenticationHandler instead.
- All: Removed deprecated request options setters on the *Client class object in favor of setting request options on Client's DefaultRequestOptions object.
- All: When creating a SAS token with a non-null SharedAccessProtocol, only valid enum values are permitted. All other values will now throw an ArgumentException.
- All: Fixed a bug that caused the PCL to not work correctly when only targeting Win8.
- Blobs: Removed deprecated (Begin/End)StartCopyFromBlob(Async) APIs in favor of using (Begin/End)StartCopy(Async) APIs.
- Blobs: Removed deprecated GetSubdirectoryReference API in favor of GetDirectoryReference.
- Blobs: Removed FileMode parameter for UploadFromFile* and AppendFromFile* APIs since there is only 1 valid option (FileMode.Open).
- Blobs: When downloading blob to local file fails, file created for download will be cleaned up.
- Blobs: proposedLeaseId for minimum AcquireLease API overloads defaults to null.
- Blobs/Files: Fixed bug in DownloadToFile APIs where existing files could be deleted if users call API with Create or CreateNew FileModes.
- Tables: Removed deprecated AtomPub payloadFormat support.
- Tables: Fixed a bug in table batch operations where storage exceptions resulted in operation contexts with incorrect HttpStatusMessage.
- Tables: Batching validation was added for batch sizes exceeding 100 operations.
- Tables: Batching validation was added for null partition keys and row keys.
- Tables: Removed deprecated overloads for Table.Retrieve APIs.
- Tables: Add ProjectSystemProperties to TableRequestOptions to allow opt-out on system properties (PartitionKey, RowKey, Timestamp).
- Files: When downloading file to local system file fails, file created for download will be cleaned up.
- Queues: Removed deprecated EndBeginClear API in favor of EndClear.
Changes since 6.2.2-preview :
- All: TestConfigurations.xml has been deleted and added to the .gitignore file to keep users from accidentally leaking their credentials. To continue running tests, simply add the same file back after you get the latest code.
Changes in 6.2.2-preview :
- All: Fixed bug with CoreCLR UserAgent string.
Changes in 6.2.0 :
- All: Refreshed ASP.NET 5 targets to work with latest RC bits (DNX Core 5.0, rc1).
- All: The dnx and net target frameworks have been unified, and DNXCore target framework has been renamed to Dotnet5.4. All DNX4.5.1 projects will take a dependency on the regular Windows Desktop dll.
- All: Fixed bug that caused issue with Windows Phone 8.1 Apps.
- Tables: Added overloads to retrieve API that don't include the optional selectedColumns param to maintain backwards compatibility.
- Tables: Fixed bug where creating a table with an EncryptionPolicy set resulted in an exception.
Changes in 6.1.0 :
- All: Refreshed ASP.NET 5 targets to work with latest RC bits (DNX 4.5.1 and DNX Core 5.0, beta8).
- All: Added support for Account Shared Access Signatures to the PCL, enabling scenarios such as ListContainers, CreateTable, GetQueueServiceProperties, etc.
- Blobs: Added a performance enhancement - uploading data using client-side encryption used to always call PutBlock + PutblockList, even if the library should be calling PutBlob.
- Blobs: Fixed a bug where uploading data using client-side encryption, async or APM, and with an access condition, will in some cases upload the data unencrypted.
- Tables: Added support for projecting columns with the Retrieve operation.
- Tables: Fixed a bug where some table queries with client-side decryption were not formatted correctly, resulting in empty entity results.
- Files: Fixed bug in Windows Runtime where FetchAttributes API did not update copyState.
Changes in 6.0.0 :
- All: Support for 2015-04-05 REST version. Please see our REST API documentation and blogs for information about the related added features.
- All: Refreshed ASP.NET 5 targets to work with latest RC bits (DNX 4.5.1 and DNX Core 5.0, beta7).
- All: Removed deprecated Shared Access Signature methods that take version as a parameter.
- Tables: Altered default settings for echoContent and payloadFormat. AtomPub payloadFormat is now obsolete.
- Tables: Fixed a bug where filter conditions for doubles were improperly formatted.
- Tables: Clarified the error message for batch transactions.
- Tables: Added JSON support for Universal Apps, Windows Runtime, PCL, DNX 4.5.1, and DNX Core 5.0 targets.
- Tables: Added echo content configurability support for Universal Apps, Windows Runtime, PCL, DNX 4.5.1, and DNX Core 5.0 targets.
- Tables: Fixed a bug where a select on a non-existent field resulted in a null reference exception if the corresponding field in the TableEntity was not nullable.
- Files: Added support for Minute and Hour Metrics to FileServiceProperties and added support for File Metrics to CloudAnalyticsClient.
Changes in 5.0.2 :
- Blobs: Fixed a bug in the min AppendTextAsync overload that caused overwrite behavior instead of append behavior. Please upgrade to 5.0.2 as soon as possible to avoid this bug.
Changes in 5.0.0 :
- All: Support for 2015-02-21 REST version. Please see our REST API documentation and blogs for information about the related added features.
- All: Added GA support for Client Side Encryption. For more information about our encryption, please see our documentation and samples.
- All: Deprecated the overload for GetSharedAccessSignature that takes a SAS version because the SAS tokens generated using the current version work fine with old libraries.
- All: Updated the error message for the error that is thrown for having more than 5 shared access policy identifiers to include shares.
- All: Made SyncMemoryStream, a MemoryStream implementation that runs synchronously even when asynchronous overloads are called public.
- All: Removed dependency on Microsoft.WindowsAzure.ConfigurationManager.
- All: Updated OData dependencies to v5.6.4 and Newtonsoft.Json dependency to 6.0.8. Removed Microsoft.WindowsAzure.ConfigurationManager dependency.
- All: Changed behavior to stop stripping out query parameters passed in with the resource URI. Some query parameters such as comp, restype, snapshot and api-version will still be removed.
- Blobs: MultiBufferMemoryStream objects passed as argument to upload methods are not disposed by the client library.
- Blobs: Added CloudAppendBlob class. For more information on this, please refer to the REST API link.
- Blobs: Deprecated StartCopyFromBlob() using the Obsolete attribute. Use StartCopy() instead.
- Blobs: CreateCloudBlobClient does not throw an exception when the credentials are null to support anonymous access.
- Blobs/Files: Fixed a bug which in very rare cases could cause streaming writes to hang.
Changes in 4.4.1 Preview :
- All: Refreshed ASP.NET 5 targets to work with latest RC bits (DNX 4.5.1 and DNX Core 5.0, beta4).
- All: Renamed some constructors for blob, container, queue, table, and account in the ASP.NET 5 and Portable libraries.
- All: Changed StorageException to public in the ASP.NET 5 and Portable libraries.
- Blobs: Fixed a bug where MD5 was calculated for a PutBlockList even though UseTransactionalMD5 was set to false.
Changes in 4.4.0 Preview :
- All: Added preview support for client side encryption for blobs, queues and tables.
- All: Added preview support for building applications via Portable Class Library (Profile 111), as well as Xamarin.iOS and Xamarin.Android.
- All: Added StringToSign to the client logs in the Shared Access Signature case.
- Blobs: Added AppendBlobs. For more information on this, please refer to the REST API link.
- Blobs: Created a CloudBlob instantiable class. Users can now get/set properties, metadata, download blobs, create snapshots, copy blobs and perform leasing actions on blobs without knowing the type of the blob. CloudPageBlob, CloudBlockBlob, and CloudAppendBlob now derive from this class.
- Blobs: Added GetBlobReference on CloudBlobContainer to get a reference to a CloudBlob object that can be used for common operations across blob types. This api does not make a service call.
- Blobs (ASP.NET): Added missing overloads for StartCopyFromBlob in CloudBlockBlob and CloudPageBlob.
- Blobs (Windows Runtime): Added missing custom encoding support for UploadTextAsync() and DownloadTextAsync() API in CloudBlockBlob.
Changes in 4.3.2 Preview :
- All: Removed incorrect dependencies.
Changes in 4.3.1 Preview :
- All: Support building ASP.NET 5 based applications, in preview.
- All: All requests add x-ms-version header.
Changes in 4.3.0 :
- All: Support building Universal and Windows Runtime based Windows Phone applications.
- All: Update OData dependencies to v5.6.2 and Newtonsoft.Json dependency to v5.0.8
Changes in 4.2.1 :
- All: Fixed a bug where a TimeoutException was not properly retried.
- All: Fixed a bug where the IngressBytes of a RequestResult was not properly set in the exception case.
- All: Fixed a bug where default request options were overwritten on the resulting objects returned from a List* or GetBlobReferenceFromServer call.
Changes in 4.2.0 :
- All: Added the NameValidator class which contains helpers that check to see if resource names are valid.
- All: Fixed a bug where the RequestUrl of a LogRecord was not correctly HTML4 decoded.
- All: The maximum allowed MaximumExecutionTime is 24 days.
- All: Reworded a log line error.
- All (WP): Fixed an issue which caused WindowsPhone applications to fail Windows App Certification that is required to submit apps to the store.
- All (WP): Added Windows Phone 8.1 Silverlight support.
- Blobs: Added support for generating SAS tokens for blob snapshots.
- Blobs: Removed ability to set CloudBlobClient.DefaultDelimiter to "\\".
- Queues (RT): Fixed an issue where the messagettl and visibilitytimeout query parameters were not properly set while adding a message to the queue.
- Tables: CloudTable.DeleteIfExists and its async counterparts returns false instead of throwing an exception when the table does not exist.
Changes in 4.1.0 :
- All: Added parsing logic and the LogRecord class to further augment the Analytics Client ListLogs methods.
- All: Added Storage Analytics version constant strings.
- All: Updated the ErrorCodeStrings classes.
- All: Fixed an issue which caused Async methods to hang when an exception was thrown while translating a previous exception.
- Blobs: Fixed an issue in DownloadToFile that caused empty files to be created in the error case.
- Files: Fixed an issue in DownloadToFile that caused empty files to be created in the error case.
Changes in 4.0.1 :
- Tables: Removed Serialized attribute and ISerializable implementation from TableEntity. Implement ITableEntity for your custom entities if you need either.
Changes in 4.0.0 :
- Files: Added support for File service.
- All: RequestResult tracks Ingress and Egress Bytes for all requests.
- All: Get{BlockBlob|PageBlob|Directory|Container|Queue|Table}Reference always treat the string parameter as a relative address.
- All: ServerTimeout is set to null by default. Therefore, "timeout" query parameter will not be sent to the server if ServerTimeout is not set by the user.
- All: Renamed DoesServiceRequest to DoesServiceRequestAttribute.
- All: Added DefaultRequestOptions to the Service Clients.
- All: Deprecated all service client request options properties (RetryPolicy, LocationMode, ServerTimeout, MaximumExecutionTime, SingleBlobUploadThresholdInBytes, ParallelOperationThreadCount, and TablePayloadFormat) via the Obsolete attribute.
- All: No longer shipping the WindowsAzure.Storage.Table-Preview package or the WindowsAzure.Storage-Preview package; everything is included in the WindowsAzure.Storage RTM package.
- All: Introduced AnalyticsClient and related entity types to simplify downloading logging and metrics data.
- All: MultiBufferMemoryStream, the BufferManager-aware high performance memory stream, is public.
- All: Shared Access Signature requests use the api-version query parameter instead of the x-ms-version header.
- All: Validated that the maxResults parameter passed into any List operation (eg ListBlobs, ListQueues, etc) is either null or has a positive value.
- All (RT): The RT libraries have been merged into a single dll. The winmd is no longer created. Code has been moved from //Lib/WindowsRuntimeTable to //Lib/WindowsRuntime/Table.
- All: Deprecated SharedKeyLiteAuthenticationHandler, use SharedKeyAuthenticationHandler instead.
- All: SharedKeyAuthenticationHandler.SignRequest does not add x-ms-date header if already present.
- Blobs: Update blob length only in APIs where the server includes the x-ms-blob-content-length or Content-Length header in the response.
- Blobs: Renamed CloudBlobDirectory.GetSubdirectoryReference to CloudBlobDirectory.GetDirectoryReference.
- Blobs: Changed the deprecated ParallelOperationThreadCount, SingleBlobUploadThresholdInBytes, and LocationMode on the BlobClient to nullables.
- Blobs: Fixed an issue that allowed whitespace metadata values to be set.
- Blobs: Changed the type of exception thrown to ArgumentNullException when a null prefix is passed to the ListBlobs method.
- Queues: Changed the deprecated LocationMode on the QueueClient to a nullable.
- Queues: Changed the visibility of QueueRequest.WriteMessageContent method to public.
- Queues: Removed the CloudQueueClient(Uri) constructor because queues don't support anonymous access. The correct usage is to use the CloudQueueClient(Uri, StorageCredentials) constructor instead.
- Tables: Changed the deprecated PayloadFormat and LocationMode on the TableClient to nullables.
- Tables: Deprecated the DataServices namespace via the Obsolete attribute.
- Tables: TableEntity is serializable via the ISerializable interface.
- Tables: Made the DateTime public in the EntityProperty class.
- Tables: Removed the CloudTableClient(Uri) constructor because tables don't support anonymous access. The correct usage is to use the CloudTableClient(Uri, StorageCredentials) constructor instead.
- Tables: CloudTable(Uri) correctly parses partition key and row key limit values from passed in URLs with SAS tokens.
- Tables (RT): Windows RT class "TableBatchOperationExtensions" no longer exists; functionality has been moved to methods in the TableBatchOperation class.
- Tables (RT): Windows RT class "CloudTableExtensions" no longer exists; functionality has been moved to methods in the CloudTable class.
- Tables (RT): Windows RT class "TableQueryExtensions" no longer exists; functionality has been moved to methods in the TableQuery class.
- Tables (RT): Windows RT class "TableOperationFactory" no longer exists; functionality has been moved to methods in the TableOperation class.
Issues fixed in 3.2.1 :
- All: Fixed a race condition that was causing deadlock during Task cancellation.
- Queues: CloudQueue objects returned by listing queues include metadata when QueueListingDetails.Metadata is used.
Issues fixed in 3.2.0 :
- All: Added support for secondary location access in Azure Storage Emulator
- All: Fixed a race condition that was causing NullReferenceException during asynchronous upload/download.
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.
Issues fixed in 3.1.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).
Issues fixed in 3.0.3 :
- All: Fixed an issue that was causing a deadlock because the cancellation registration was being de-registered while holding on to a lock that the cancellation callback was waiting on.
- All: Fixed an issue where parsing exception information out of the response stream while using async was blocking on IO calls.
- All (WP): Fixed an issue with cancellation and timeout during upload and download causing a thread to hang. HttpWebRequest.Abort is not called during stream operations anymore.
- Blobs: Streams opened with OpenRead methods use the user-provided buffer pooling implementation.
- Blobs: If the parent of a blob is the container, Cloud{BlockBlob|PageBlob|BlobDirectory}.Parent returns a valid CloudBlobDirectory with an empty prefix. Similarly, container.GetDirectoryReference("") gets a valid CloudBlobDirectory representing the container.
- Tables (Perf): Fixed an issue where the entity properties were being enumerated twice during table write operations while using JSON.
- Tables (Perf): Parse the URI for the account name only once in the client constructor and store it so that all table operations can use the stored value.
Issues fixed in 3.0.2 :
- All (WP): Fixed an issue causing ArgumentOutOfRangeException in many APIs.
- Queues: Fixed an issue causing NullReferenceException when trying to re-create an existing queue.
- Tables: Fixed an issue with TableServiceContext causing NullReferenceException when the error response cannot be parsed.
- Tables (RT): Do not allow users to set JsonFullMetadata format on RequestOptions in RT, because JSON is not supported on the RT library yet.
Issues fixed in 3.0.1 :
- All (WP): Set the Accept type to application/xml explicitly for Get/SetACL.
- Blobs: LastModified and ETag properties are populated after Lease operations.
- Tables: Added an explicit reference to Microsoft.Data.Services.Client in the Nuget package.
- Tables: Fixed an issue caused by a Json .NET bug that resulted in an error being thrown while parsing a table query response. More details on the bug can be found here: http://james.newtonking.com/archive/2013/11/29/fixing-jarray-getenumerator-method-not-found-bug
- Tables (RT): Fixed continuation tokens for queries and listing operations.
Changes in 3.0.0 :
- All: Support for 2013-08-15 REST version - see here for additional details: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx.
- All: Suppress warning for FiddlerCore EntensionAttribute conflict.
- Blobs: Added support for XML serialize/deserialize of BlobContinuationToken.
- Blobs: Added ParallelOperationThreadCount and SingleBlobUploadThresholdInBytes to BlobRequestOptions.
- Tables: Fixed GetHashCode() in EntityProperty to return equal values for binary types.
- Tables: JsonMinimalMetadata is now the default payload format (rather than AtomPub). Payload format can be specified for all table requests by using CloudTableClient.TablePayloadFormat or for an individual table request by using TableRequestOptions.TablePayloadFormat.
- Tables (RT): Fixed error parsing for tables.
Issues fixed in 2.1.0.4 :
- Tables: Do not send the cast operator in the table query filter string.
Issues fixed in 2.1.0.3 :
- All: Registered wait handles are unregistered sooner for more efficient GC.
Issues fixed in 2.1.0.2 :
- Blobs: Streams opened by OpenRead do not throw NotSupportedException when Flush is called.
- Tables: Generic ExecuteQuery methods on CloudTable execute IQueryable queries correctly by generating the filter string.
Changes in 2.1.0 :
- All: Changed User-Agent header value to include .NET CLR and OS versions
- All: Performance improvements across all services (major improvements detailed below).
- All: Added logging functionality for all operations.
- All: Added Task overloads for all asynchronous APIs.
- All: Listing methods provide a third overload for that accepts just prefix.
- All: Exposed header, query and generic constants as public to assist clients developing via the protocol layer.
- All: Buffers that would end up in Large Object Heap are avoided as much as possible.
- All: OperationContext.ClientRequestID is automatically set for each operation with a new GUID if the user does not provide one.
- All: StorageCredentials exposes a new UpdateSASToken method to allow users to update their SAS Token in place.
- All: StorageCredentials exposes a new UpdateKey overload that only requires key value.
- All: StorageCredentials exposes a new ExportBase64EncodedKey method that returns the key in Base64 encoding.
- All: .NET MD5 implementation is used by default, FISMA (Native) MD5 can be enabled by setting CloudStorageAccount.UseV1MD5 to false explicitly.
- All: Mark the assembly to allow partially trusted callers.
- All: Added EndpointSuffix to CloudStorageAccount.
- All: Delays between request are pre-empted when user cancels the operation.
- All: Fix to measure End-to-end timeouts more accurately.
- All: Types that contain disposable objects implement IDisposable.
- All: Synchronous APIs correctly timeout if network IO is pending.
- All: When a request times out, the StorageException object that was thrown will contain a TimeoutException as InnerException.
- All: Synchronous requests do not retry errors anymore that occur before sending the request.
- All: Wait handles used for asynchronous requests are unregistered properly for better GC.
- All: CloudStorageAccount.ToString can recreate the original connection string that was passed in to CloudStorageAccount.Parse.
- All: Expose IBufferManager on ServiceClients enabling users to provide a buffer pooling implementation.
- All: Abort a pending request if upload times out to prevent socket exhaustion
- All: Fixed a potential overflow in ExponentialRetry.
- All: Queue and Table SAS validation should not check for signed resource(sr). Tables should check the table name(tn).
- Blobs: ICloudBlob exposes new BeginOpenRead/EndOpenRead methods to asynchronously open a stream to read from the blob.
- Blobs: Cloud[Block|Page]Blob.OpenRead performs a service request.
- Blobs: Streams opened with OpenRead methods do not discard the cache anymore if seeked to a position within the cached range.
- Blobs: Streams opened with OpenRead methods provide true synchronous Read API.
- Blobs: Streams opened with OpenRead methods do not allow calling multiple BeginRead methods because the result is undefined.
- Blobs: ICloudBlob.StreamMinimumReadSizeInBytes can be set to any value larger than or equal to 16KB.
- Blobs: OpenWrite methods return CloudBlobStream instead of Stream. The CloudBlobStream type provides explicit commit and asynchronous flush functionality.
- Blobs: Parallel upload performance of streams opened with OpenWrite methods is improved considerably due to keeping number of active operations at a certain level.
- Blobs: ICloudBlob exposes new UploadFromStream overloads that accept a length parameter, allowing users to upload a portion of the stream.
- Blobs: CloudBlockBlob.UploadFromStream correctly updates the locally cached MD5.
- Blobs: CloudBlockBlob exposes new UploadFromFile, UploadFromByteArray, and UploadText methods.
- Blobs: CloudPageBlob exposes new UploadFromFile and UploadFromByteArray methods.
- Blobs: CloudBlockBlob exposes new DownloadToFile, DownloadToByteArray, DownloadRangeToByteArray, and DownloadText methods.
- Blobs: CloudPageBlob exposes new DownloadToFile, DownloadToByteArray, and DownloadRangeToByteArray methods.
- Blobs: Added support for page blob sequence numbers.
- Blobs: Added support for public access to container creation.
- Blobs: Cloud[Block|Page]Blob.Exists also updates properties.
- Blobs: Cloud[Block|Page]Blob.StartCopyFromBlob verifies the source URI to prevent a possible NullReferenceException.
- Blobs: ICloudBlob exposes new IsSnapshot and SnapshotQualifiedUri properties for easier handling of blob snapshots.
- Blobs: Blob downloads skip length validation if Content-Length header is not set.
- Blobs: BlobProperties constructor that takes another BlobProperties object correctly copies all properties.
- Blobs: Traversing to the parent container from a CloudBlobDirectory does not create a new CloudBlobContainer object.
- Blobs (RT): IRandomAccessStreamWithContentType returned by ICloudBlob.OpenReadAsync correctly implements CloneStream and Seek.
- Blobs (RT): OpenWriteAsync methods return ICloudBlobStream instead of IOutputStream. ICloudBlobStream type provides explicit commit functionality.
- Blobs (RT): ICloudBlobStream.FlushAsync no longer blocks.
- Queues: MaxResults argument in queue listing APIs is nullable.
- Queues: CloudQueue.EndBeginClear is deprecated.
- Queues: All queue APIs are correctly marked with DoesServiceRequest attribute.
- Queues: New CloudQueue.BeginDeleteMessage overloads with less arguments.
- Queues (RT): visibilityTimeout argument of CloudQueue.UpdateMessage is not nullable.
- Queues (RT): CloudQueueClient.ListQueuesSegmentedAsync takes a new argument of type QueueRequestOptions.
- Tables: Table Service Layer supports queries with LINQ.
- Tables: TableEntity derived classes now support compiled serializers to improve serialization performance.
- Tables: Table allows query execution with a resolver against non-generic query types (dynamic entity types).
- Tables: Added IgnorePropertyAttribute for TableEntities to allow individual properties on POCO objects to be ignored during serialization.
- Tables: If-Match condition for Delete/Replace/Merge operations will not be set if entity ETag is null.
- Tables: Executing a batch operation with no operations will throw an InvalidOperationException instead of an ArgumentOutOfRangeException.
- Tables: To support IQueryable projections the TableQuery class Generic type is no longer constrained with where T: ITableEntity, new(). For TableQueries not created with via the IQueryable these same effective constraints are validated at runtime.
- Tables: Performance improvement to reduce Activator.CreateInstance usage for entity instantiation.
- Tables: Exposed PropertyAsObject Property in EntityProperty as publicly readable.
- Tables: Exposed table serialialization logic. Allow users to persist and read back entities that don't derive from TableEntity using static methods(ReadUserObject and WriteUserObject).
- Tables: Exposed CreateEntityPropertyFromObject in EntityProperty so users can pass in a value and get the corresponding EntityProperty.
- Tables: Escape single quote in PartitionKey and RowKey correctly while generating URIs.
Issues fixed in 2.0.6.1 :
- Tables: Fix for Table Service layer to drain response stream
Issues fixed in 2.0.6 :
- All: Default RetryPolicy filters updated to not retry 100-407, 409-499, 501, and 505
- All: Support for all flavors of SharedKey and SharedKeyLite message signing through AuthenticationScheme property on client classes.
- All: Unusable HttpWebRequestFactory and WebRequestExtensions are not public anymore
- All: TranslateFromExceptionMessage has been deprecated in Microsoft.WindowsAzure.Storage.dll and is now available only in Microsoft.WindowsAzure.Storage.WinMD
- All: StorageCredentials supports empty account keys.
- All: RequestResult deserialization does not fail when Content-MD5 is missing
- Blobs (RT): DownloadToStreamAsync and DownloadRangeToStreamAsync writes the entire data to the given stream before returning back to the caller.
- Blobs (RT): UploadFromStreamAsync commits the blob in a worker thread to unblock UI.
- Blobs: Blob stream now uses a GUID instead of a random number as block ID prefix to prevent collisions.
- Queues: Changed return type of CloudQueue.BeginSetMetadata(AsyncCallback, object) to ICancellableAsyncResult.
- Tables: Changed default message signing to SharedKey (except for Data Services).
- Tables: EntityProperty updated to set the IsNull value for properties correctly in the case when the user sets an EntityProperty value through its setter.
- Tables: EdmType for null values in EntityProperty is set correctly and does not default to string any more.
Issues fixed in 2.0.5.1 :
- All: Make sure the response stream is drained to prevent socket exhaustion.
Issues fixed in 2.0.5 :
- All: StorageException is serializable. Also, other useful objects for debugging (StorageExtendedErrorInformation and RequestResult) are also serializable.
- All: SharedAccessSignature helper uses culture invariant characteristics to calculate SAS.
- All: CloudStorageAccount can parse connection strings with extra blank values.
- All: OperationContext StartTime and EndTime are populated during execution.
- All: StorageCredentials.UpdateKey does not work on SAS/Anonymous credentials anymore.
- All: Metadata headers are sorted using en-US culture to prevent 403 errors in some cultures.
- All: Fixed issue where in some cases a sync method call could result in a 0 ms timeout being set on HttpWebRequest.
- Blobs: Snapshot time embedded in blob Uri is parsed in the constructor.
- Blobs: GetBlobReferenceFromServer works with blob Uri that contain a SAS token.
- Blobs: BlobWriteStream honors AccessCondition.
- Blobs: BlobWriteStream prevents using StoreBlobContentMD5 on existing page blobs.
- Blobs: ICloudBlob has OpenRead method.
- Blobs: Cloud*Blob.OpenRead can be used with snapshots.
- Blobs: AbortCopy does not throw an exception anymore when a copy is successfully aborted.
- Queues: Ability to recreate CloudQueueMessage with Message Id and Pop Receipt.
- Tables: Exceptions during TableBatchOperation parse the entity index from the server response.
- Tables: Floating-point number filter is generated using invariant culture.
Issues fixed in 2.0.4.1 :
- All: Updated Odata dependency to latest and also changed nuspec to allow any version >= 5.2.0.
Issues fixed in 2.0.4 :
- All: Flush HttpWebRequest's request stream before calling BeginGetResponse.
- All: Support Null Retry Policies.
- Blobs: Continue ListContainers parsing if a container property is unknown.
- Queues (RT): DeleteMessageAsync(string messageId, string popReceipt) ignores the messageId and popReceipt.
- Tables: Add a TableConstant to define minimum DateTime supported.
- Tables: Correct count behavior with synchronous non segmented execution.
- Tables: Allow String.Empty in TableQuery Filters.
Issues fixed in 2.0.3 :
- All (RT): General metadata correctness test fails when using the RT library to develop windows store apps.
- Queues: CloudQueueMessage.MaxNumberOfMessagesToPeek, CloudQueueMessage.MaxMessageSize and CloudQueueMessage.MaximumTimeToLive have disappeared from CloudQueueMessage.
- Queues: CloudQueue.BeginCreateIfNotExists and CloudQueue.BeginDeleteIfExists methods expect valid options argument.
- Tables: When one or more of the batches fails, but then succeeds on a retry, the "extra" TableResults of the failed transactions are also returned.
- Tables: TableQuery.GenerateFilterConditionForLong does not append 'L' at the end of the value and thus values larger than Int32.MaxValue cannot be used when filtering.
- Tables: TableEntity does not support serializing nullable values.
- Tables: CloudTable.EndListTablesSegmented method does not work correctly.
Issues fixed in 2.0.2 :
- All: CompletedSynchronously property returns inconsistent values on IAsyncResult objects returned by asynchronous methods and thus TaskFactory.FromAsync does not work properly.
- Tables: Public DynamicTableEntity constructors use DateTime even though the Timestamp property is of type DateTimeOffset.
- Tables: BeginSaveChangesWithRetries overload ignores the options argument.
Issues fixed in 2.0.1 :
- All: CloudStorageAccount.*Parse methods throw an exception for "UseDevelopmentStorage=true" string.
- All: StorageErrorCodeStrings class is missing.
- Blobs: ICloudBlob interface does not have GetSharedAccessSignature method.