foreach Azure.Pageable<BlobItem> 然后抛出 System.FormatException
foreach Azure.Pageable<BlobItem> then throw System.FormatException
我参考了 tutorial 编写了将 blob 上传到 IoT edge mcr.microsoft 的代码。com/azure-blob-storage: 列出容器内 blob 的最新模块。
BlobServiceClient blobServiceClient = new BlobServiceClient (connectionString);
string containerName = "customer01";
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
string localPath = "./data/";
string fileName = "quickstart" + Guid.NewGuid ().ToString () + ".txt";
string localFilePath = Path.Combine (localPath, fileName);
// Write text to the file
await File.WriteAllTextAsync (localFilePath, "Hello, blob storage!");
// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient (fileName);
Console.WriteLine ("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);
// Open the file and upload its data
using FileStream uploadFileStream = File.OpenRead (localFilePath);
await blobClient.UploadAsync (uploadFileStream, true);
uploadFileStream.Close ();
Console.WriteLine ("Listing blobs...");
// List all blobs in the container
await
foreach (BlobItem blobItem in containerClient.GetBlobsAsync()) {
Console.WriteLine ("\t" + blobItem.Name);
}
它在 foreach "containerClient.GetBlobsAsync()" 时抛出 "Unhandled exception"。
Unhandled exception. System.FormatException: String '' was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(ReadOnlySpan1 s, DateTimeFormatInfo dtfi, DateTimeStyles styles, TimeSpan& offset) at System.DateTimeOffset.Parse(String input, IFormatProvider formatProvider, DateTimeStyles styles) at System.DateTimeOffset.Parse(String input, IFormatProvider formatProvider) at Azure.Storage.Blobs.Models.BlobItemProperties.FromXml(XElement element) at Azure.Storage.Blobs.Models.BlobItem.FromXml(XElement element) at Azure.Storage.Blobs.Models.BlobsFlatSegment.<>c.<FromXml>b__30_0(XElement e) at System.Linq.Enumerable.SelectEnumerableIterator2.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Azure.Storage.Blobs.Models.BlobsFlatSegment.FromXml(XElement element) at Azure.Storage.Blobs.BlobRestClient.Container.ListBlobsFlatSegmentAsync_CreateResponse(ClientDiagnostics clientDiagnostics, Response response) at Azure.Storage.Blobs.BlobRestClient.Container.ListBlobsFlatSegmentAsync(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, Uri resourceUri, String version, String prefix, String marker, Nullable1 maxresults, IEnumerable1 include, Nullable1 timeout, String requestId, Boolean async, String operationName, CancellationToken cancellationToken)
at Azure.Storage.Blobs.BlobContainerClient.GetBlobsInternal(String marker, BlobTraits traits, BlobStates states, String prefix, Nullable1 pageSizeHint, Boolean async, CancellationToken cancellationToken) at Azure.Storage.Blobs.Models.GetBlobsAsyncCollection.GetNextPageAsync(String continuationToken, Nullable1 pageSizeHint, Boolean async, CancellationToken cancellationToken)
at Azure.Core.Pipeline.TaskExtensions.EnsureCompleted[T](ValueTask1 task) at Azure.Storage.StorageCollectionEnumerator1.StoragePageable.GetEnumerator()+MoveNext()
at BlobStorageV12.Program.Main(String[] args) in D:\projects\code\dotNetCore\VSCode\BlobQuickstartV12_Git\BlobQuickstartV12\Program.cs:line 38
at BlobStorageV12.Program.
- 环境:
- Azure.Storage.Blobs 12.4.4
- 存储是 Azure Ubuntu VM
上的模块 "mcr.microsoft.com/azure-blob-storage:latest"
- Windows 10 上的代码 运行,VS Code 1.45.1,.NET Core SDK:版本:3.1.100 提交:cd82f021f4
这是 GetBlobs() 中的一个 XML,通过提琴手捕获。 "Creation-Time" 为空。
<?xml version="1.0" encoding="UTF-8"?>
<EnumerationResults ServiceEndpoint="http://my edge device storage url " ContainerName="blobfromappa1f9e394-5bd2-4110-b9c5-9396b4a7477b">
<Blobs>
<Blob>
<Name>myFile8eba48b8-475a-4f32-a8a4-c6866cacd703.txt</Name>
<Properties>
<Creation-Time />
<Last-Modified>Wed, 10 Jun 2020 01:51:53 GMT</Last-Modified>
<Etag>0x8D80CE0D98F7DF6</Etag>
<Content-Length>14</Content-Length>
<Content-Type>application/octet-stream</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-MD5>76PGAUTjS5+W39/uoprDKg==</Content-MD5>
<Cache-Control />
<Content-Disposition />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
<ServerEncrypted>false</ServerEncrypted>
<TagCount>0</TagCount>
</Properties>
</Blob>
</Blobs>
<NextMarker />
</EnumerationResults>
有谁知道为什么抛出异常?是因为我错过了一些配置吗?
谢谢!
阅读有关它的文档here
,基本上问题是 IoT edge 使用与 REST API 版本 2017-04-17 一致的 blob 存储模块。
Blob storage modules on IoT Edge use the Azure Storage SDKs, and are
consistent with the 2017-04-17 version of the Azure Storage API for
block blob endpoints.
考虑到这一点,您将需要使用面向 REST API 版本 2017-04-17 的 SDK 版本。根据这个link
, that SDK version would be 8.2
. You can install that version from here: https://www.nuget.org/packages/WindowsAzure.Storage/8.2.0
我参考了 tutorial 编写了将 blob 上传到 IoT edge mcr.microsoft 的代码。com/azure-blob-storage: 列出容器内 blob 的最新模块。
BlobServiceClient blobServiceClient = new BlobServiceClient (connectionString);
string containerName = "customer01";
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
string localPath = "./data/";
string fileName = "quickstart" + Guid.NewGuid ().ToString () + ".txt";
string localFilePath = Path.Combine (localPath, fileName);
// Write text to the file
await File.WriteAllTextAsync (localFilePath, "Hello, blob storage!");
// Get a reference to a blob
BlobClient blobClient = containerClient.GetBlobClient (fileName);
Console.WriteLine ("Uploading to Blob storage as blob:\n\t {0}\n", blobClient.Uri);
// Open the file and upload its data
using FileStream uploadFileStream = File.OpenRead (localFilePath);
await blobClient.UploadAsync (uploadFileStream, true);
uploadFileStream.Close ();
Console.WriteLine ("Listing blobs...");
// List all blobs in the container
await
foreach (BlobItem blobItem in containerClient.GetBlobsAsync()) {
Console.WriteLine ("\t" + blobItem.Name);
}
它在 foreach "containerClient.GetBlobsAsync()" 时抛出 "Unhandled exception"。
Unhandled exception. System.FormatException: String '' was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(ReadOnlySpan1 s, DateTimeFormatInfo dtfi, DateTimeStyles styles, TimeSpan& offset) at System.DateTimeOffset.Parse(String input, IFormatProvider formatProvider, DateTimeStyles styles) at System.DateTimeOffset.Parse(String input, IFormatProvider formatProvider) at Azure.Storage.Blobs.Models.BlobItemProperties.FromXml(XElement element) at Azure.Storage.Blobs.Models.BlobItem.FromXml(XElement element) at Azure.Storage.Blobs.Models.BlobsFlatSegment.<>c.<FromXml>b__30_0(XElement e) at System.Linq.Enumerable.SelectEnumerableIterator2.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Azure.Storage.Blobs.Models.BlobsFlatSegment.FromXml(XElement element) at Azure.Storage.Blobs.BlobRestClient.Container.ListBlobsFlatSegmentAsync_CreateResponse(ClientDiagnostics clientDiagnostics, Response response) at Azure.Storage.Blobs.BlobRestClient.Container.ListBlobsFlatSegmentAsync(ClientDiagnostics clientDiagnostics, HttpPipeline pipeline, Uri resourceUri, String version, String prefix, String marker, Nullable1 maxresults, IEnumerable1 include, Nullable1 timeout, String requestId, Boolean async, String operationName, CancellationToken cancellationToken)
at Azure.Storage.Blobs.BlobContainerClient.GetBlobsInternal(String marker, BlobTraits traits, BlobStates states, String prefix, Nullable1 pageSizeHint, Boolean async, CancellationToken cancellationToken) at Azure.Storage.Blobs.Models.GetBlobsAsyncCollection.GetNextPageAsync(String continuationToken, Nullable1 pageSizeHint, Boolean async, CancellationToken cancellationToken)
at Azure.Core.Pipeline.TaskExtensions.EnsureCompleted[T](ValueTask1 task) at Azure.Storage.StorageCollectionEnumerator1.StoragePageable.GetEnumerator()+MoveNext()
at BlobStorageV12.Program.Main(String[] args) in D:\projects\code\dotNetCore\VSCode\BlobQuickstartV12_Git\BlobQuickstartV12\Program.cs:line 38
at BlobStorageV12.Program.
- 环境:
- Azure.Storage.Blobs 12.4.4
- 存储是 Azure Ubuntu VM 上的模块 "mcr.microsoft.com/azure-blob-storage:latest"
- Windows 10 上的代码 运行,VS Code 1.45.1,.NET Core SDK:版本:3.1.100 提交:cd82f021f4
这是 GetBlobs() 中的一个 XML,通过提琴手捕获。 "Creation-Time" 为空。
<?xml version="1.0" encoding="UTF-8"?>
<EnumerationResults ServiceEndpoint="http://my edge device storage url " ContainerName="blobfromappa1f9e394-5bd2-4110-b9c5-9396b4a7477b">
<Blobs>
<Blob>
<Name>myFile8eba48b8-475a-4f32-a8a4-c6866cacd703.txt</Name>
<Properties>
<Creation-Time />
<Last-Modified>Wed, 10 Jun 2020 01:51:53 GMT</Last-Modified>
<Etag>0x8D80CE0D98F7DF6</Etag>
<Content-Length>14</Content-Length>
<Content-Type>application/octet-stream</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-MD5>76PGAUTjS5+W39/uoprDKg==</Content-MD5>
<Cache-Control />
<Content-Disposition />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
<ServerEncrypted>false</ServerEncrypted>
<TagCount>0</TagCount>
</Properties>
</Blob>
</Blobs>
<NextMarker />
</EnumerationResults>
有谁知道为什么抛出异常?是因为我错过了一些配置吗? 谢谢!
阅读有关它的文档here
,基本上问题是 IoT edge 使用与 REST API 版本 2017-04-17 一致的 blob 存储模块。
Blob storage modules on IoT Edge use the Azure Storage SDKs, and are consistent with the 2017-04-17 version of the Azure Storage API for block blob endpoints.
考虑到这一点,您将需要使用面向 REST API 版本 2017-04-17 的 SDK 版本。根据这个link
, that SDK version would be 8.2
. You can install that version from here: https://www.nuget.org/packages/WindowsAzure.Storage/8.2.0