首页 > 解决方案 > Azure 存储文件 ShareClient 引发异常

问题描述

创建了一个示例控制台应用程序,我正在尝试使用此代码连接到 Azure 文件存储。

var connectionString = "DefaultEndpointsProtocol=https;AccountName=<account-name>;AccountKey=<account-key>;EndpointSuffix=core.windows.net;";            
        var shareClient = new ShareClient(connectionString, "testfileshare");
        shareClient.CreateIfNotExists();

帐户中存在共享名称“ testfileshare ”,并且“ CreateIfNotExists() ”方法调用抛出 AggregateException 并带有消息

“6 次尝试后重试失败”并带有 InnerException 消息“底层连接已关闭:发送时发生意外错误。”

我正在使用 Azure.Storage.Files.Shares,12.4.0 版本。目标框架是.NET4.6.2。尝试将目标框架更新为 .NET4.7.2 但得到相同的错误。

为什么我会收到此错误?

添加堆栈跟踪:

     at Azure.Core.Pipeline.RetryPolicy.<ProcessAsync>d__11.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Core.Pipeline.RetryPolicy.Process(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipelinePolicy.ProcessNext(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.Process(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipelinePolicy.ProcessNext(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.Process(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipelinePolicy.ProcessNext(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.Process(HttpMessage message, ReadOnlyMemory`1 pipeline)
   at Azure.Core.Pipeline.HttpPipeline.Send(HttpMessage message, CancellationToken cancellationToken)
   at Azure.Storage.Files.Shares.FileRestClient.Share.<CreateAsync>d__0.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.Files.Shares.ShareClient.<CreateInternal>d__31.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.Files.Shares.ShareClient.<CreateIfNotExistsInternal>d__34.MoveNext()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Azure.Storage.Files.Shares.ShareClient.CreateIfNotExists(IDictionary`2 metadata, Nullable`1 quotaInGB, CancellationToken cancellationToken)
   at FileStorageTest.Program.Main(String[] args) in C:\Tests\FileStorageTest\FileStorageTest\Program.cs:line 24

标签: azureazure-storageazure-storage-files

解决方案


我发现了这个问题。当我从 nuget 添加 Azure.Storage.Files.Shares 包引用时,我观察到在项目文件中 Azure.Core 引用是从“net461”文件夹添加的,而其他引用是从“netstandard2.0”文件夹添加的,我的应用程序目标框架是“Net4 .6.2"

这导致了这个问题。当我手动将 Azure.Core 参考路径更改为“netstandard2.0”时,它工作正常。

    <Reference Include="Azure.Core, Version=1.5.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8, processorArchitecture=MSIL">
<!--<HintPath>..\packages\Azure.Core.1.5.0\lib\net461\Azure.Core.dll</HintPath>-->
      <HintPath>..\packages\Azure.Core.1.5.0\lib\netstandard2.0\Azure.Core.dll</HintPath>
    </Reference>

我通过升级“Azure.Storage.Files.Shares”包重现了这个问题。我不知道是 VS 问题还是 nuget 问题。


推荐阅读