Microsoft.WindowsAzure.Storage.StorageException:远程服务器返回错误:(403)

Kes*_*rah 1 azure azure-storage

刚发布时,这是初始错误:

System.ApplicationException:跟踪侦听器AzureBlobTraceListener已禁用。---> System.InvalidOperationException:未指定云存储帐户的SAS URL。使用环境变量“ DIAGNOSTICS_AZUREBLOBCONTAINERSASURL”在Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceLi ?? stener.RefreshConfig ??()中对其进行定义。

然后DIAGNOSTICS_AZUREBLOBCONTAINERSASURL,我将其值设置为生成的Blob服务SAS URL 添加到了应用程序设置中。在这我得到一个新的错误:

System.ApplicationException:跟踪侦听器AzureBlobTraceListener已禁用。---> System.ArgumentException:Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(Microsoft.WindowsAzure.Storage.Core.Auth.SharedAccessSignatureHelper.ParseQuery(IDictionary 2 queryParameters, Boolean mandatorySignedResource) at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(Uri address, StorageCredentials& parsedCredentials, Nullable1&parsedSnapshot)处的有效共享访问签名缺少必选参数Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.ParseQueryAndVerify(StorageUri地址,StorageCredentials凭据)上的StorageUri地址,StorageCredentials和parsedCredentials,Nullable`1和parsedSnapshot)(Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer凭据,StorageCri)在Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener中。

然后sr=b,我将其添加到“ DIAGNOSTICS_AZUREBLOBCONTAINERSASURL”中,导致出现以下错误:

Microsoft.WindowsAzure.Storage.StorageException:远程服务器返回错误:(403)禁止。---> System.Net.WebException:远程服务器返回错误:(403)禁止。在System.Net.HttpWebRequest.GetResponse()在Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync [T](RESTCommand1 cmd, IRetryPolicy policy, OperationContext operationContext) --- End of inner exception stack trace --- at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommandMicrosoft.WindowsAzure.WebSites.Diagnostics.AzureBlobStreamTraceListener.1 cmd,IRetryPolicy策略,OperationContext operationContext)(Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadBlockList(BlockListingFilter blockListingFilter,AccessCondition accessCondition,BlobRequestOptions选项,OperationContext operationContext))在Microsoft.WindowsAzure.WebSites.Diagnostics.AzureBlobTraceListener.ConsumeBuffer()处请求信息RequestID:5225782d-0001-0175-6d94-fc82dd000000 RequestDate:Fri,2017年7月14日11:33:16 GMT StatusMessage:服务器无法对请求进行身份验证。请确保正确构成Authorization标头的值,包括签名。错误代码:身份验证失败

用于在应用程序设置中声明AzureWebJobsDashboard和AzureWebJobsStorage的连接字符串: 在此处输入图像描述

Bra*_*ang 5

根据您的描述,我想您遇到该错误的原因是您的SAS令牌没有足够的权限来对blob进行CRUD。

SAS令牌必须是Blob容器SAS令牌,而不是Blob SAS令牌。

此外,如果您设置了Azure Web应用程序的诊断日志“应用程序日志记录”功能,它将在您的Web应用程序的设置中自动生成SAS令牌。

更多细节,请参考下图:

在诊断日志中设置存储帐户。

在此处输入图片说明

然后它将自动设置appsetting:

在此处输入图片说明


更新:

未能验证Microsoft Azure WebJobs SDK仪表板连接字符串。Microsoft Azure存储帐户连接字符串的格式不正确。

如果将Webjobs上传到Web应用程序,则Web Jobs需要进行两次appsetting。一个是仪表板连接字符串,另一个是AzureWebJobsStorage。

这两个设置都需要存储连接字符串而不是存储SAS。

您可以找到存储连接字符串,如下图所示:

1.打开存储访问密钥功能。

在此处输入图片说明

2.复制连接字符串:

在此处输入图片说明

3.在Web应用程序的appsetting中替换连接字符串。

在此处输入图片说明