【发布时间】:2020-04-05 23:38:44
【问题描述】:
我有一个 Azure 函数,它应该处理存储帐户容器中的文件。 Azure 函数应该每天触发。但是每周一两次我看到容器中的一些文件没有被处理:(开始600的401个文件没有被处理,因为错误403)
正如我在 Stackoverflow 中所读到的。这是因为 SAS 令牌时间偏差。是否有可能在我的代码没有大的改变的情况下解决这个问题?
我的代码:
CloudStorageAccount sa;
CloudStorageAccount.TryParse("MyConnString", out sa);
_blobClient = sa.CreateCloudBlobClient();
ICloudBlob sourceBlob = _blobClient.GetBlobReferenceFromServer(new Uri(BlobUrl));
更新
执行函数时出现消息异常: process_files_by_http_trigger_activity 远程服务器返回了一个 错误:(403)禁止。远程服务器返回错误:(403) 禁止。
调用栈:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__16.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__13.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 内部异常 Microsoft.WindowsAzure.Storage.StorageException 处理于 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw:在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: 第604章) Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlobClient.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: 第563章) Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudBlobClient.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: 第546章) bip.dev.afu.inbound.we.process_xz_files_by_http_trigger.XzFileMove (bip.dev.afu.inbound.we,版本=1.0.0.0,文化=中性, PublicKeyToken=null) 在 bip.dev.afu.inbound.we.process_xz_files_by_http_trigger+d__10.MoveNext (bip.dev.afu.inbound.we,版本=1.0.0.0,文化=中性, PublicKeyToken=null) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.VoidTaskMethodInvoker
2+<InvokeAsync>d__2.MoveNext (Microsoft.Azure.WebJobs.Host, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bfxxxx64e35) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7xxxx934e089) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b7xxxx934e089) at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker2+d__9.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__24.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__23.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__22.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b7xxxx934e089) 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b7xxxx934e089)
在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__16.MoveNext (Microsoft.Azure.WebJobs.Host,版本=2.4.0.0,文化=中性, PublicKeyToken=31bfxxxx64e35) 内部异常 System.Net.WebException 处理于 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync:
在 System.Net.HttpWebRequest.GetResponse(系统,版本 = 4.0.0.0, 文化=中性,PublicKeyToken=b7xxxx934e089) 在 Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync (Microsoft.WindowsAzure.Storage,版本=7.2.1.0,文化=中性, PublicKeyToken=31bfxxxx64e35Microsoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=31bfxxxx64e35: c:\程序文件 (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.csMicrosoft.WindowsAzure.Storage, 版本=7.2.1.0,文化=中性,PublicKeyToken=3xxxxx6ad364e35: 第677章)
【问题讨论】:
-
您的 SAS 令牌是否可能已过期?
-
我不这么认为,因为只有在过程开始时我才有这个问题,而不是在结束时
-
您能分享一下您是如何创建 SAS 令牌的吗?请编辑问题并在其中包含代码。
-
其实我只使用ConnectionString。我不生成 SAS 密钥。可能是 SAS 不是我收到此错误的原因
-
如果您使用连接字符串并且如果您的代码在 Azure 中运行,由于时钟偏差,您应该不会看到 403 错误。您是否看到完整的异常详细信息?
标签: c# .net azure azure-storage-account sas-token