Bri*_*Kay 12 vb.net asp.net azure azure-storage-blobs
我有一个使用WindowsAzure.Storage API v3的WebForms应用程序.它在开发和一个生产环境中工作正常,但我推出了一个新实例,任何调用Azure Blob存储的代码都会给我403错误.
我已经习惯了这一段时间了,并且它对Blob存储的任何调用失败了,所以不是显示我的代码,而是显示我的堆栈跟踪:
[WebException: The remote server returned an error: (403) Forbidden.]
System.Net.HttpWebRequest.GetResponse() +8525404
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) +1541
[StorageException: The remote server returned an error: (403) Forbidden.]
Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync(RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) +2996
Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessType accessType, BlobRequestOptions requestOptions, OperationContext operationContext) +177
ObsidianData.Azure.Storage.GetContainer(CloudBlobClient client, Containers targetContainer) in D:\Dev\nSource\Obsidian\Source\ObsidianData\Azure\Storage.vb:84
ObsidianWeb.Leads.HandleListenLink(String fileName, HyperLink link) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:188
ObsidianWeb.Leads.LoadEntity_ContactDetails(BoLead lead) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:147
ObsidianWeb.Leads.LoadEntity(BoLead Lead) in D:\Dev\nSource\Obsidian\Source\ObsidianWeb\Bdc\Leads.aspx.vb:62
EntityPages.EntityPage`1.LoadEntity() +91
EntityPages.EntityPage`1.Page_LoadComplete(Object sender, EventArgs e) +151
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4018
Run Code Online (Sandbox Code Playgroud)
这是我试过的......
有任何想法吗?这应该只是使用端口80或443,对吗?所以这不应该是某种网络问题.如果那是错的,请告诉我.
更新:有人要求查看代码.好的,我写了一个名为Azure.Storage的类,它只是抽象我的云存储代码.我们没有调用Storage.Exists,所以这里是感觉相关的那个类的一部分:
Public Shared Function Exists(container As Containers, blobName As String) As Boolean
Dim Dir As CloudBlobContainer = GetContainer(container)
Dim Blob As CloudBlockBlob = Dir.GetBlockBlobReference(blobName.ToLower())
Return Blob.Exists()
End Function
Private Shared Function GetContainer(client As CloudBlobClient, targetContainer As Containers)
Dim Container As CloudBlobContainer = client.GetContainerReference(targetContainer.ToString.ToLower())
Container.CreateIfNotExists()
Container.SetPermissions(New BlobContainerPermissions() With {.PublicAccess = BlobContainerPublicAccessType.Blob})
Return Container
End Function
Private Shared Function GetCloudBlobClient() As CloudBlobClient
Dim Account As CloudStorageAccount = CloudStorageAccount.Parse(Settings.Cloud.AzureStorageConnectionString())
Return Account.CreateCloudBlobClient()
End Function
Run Code Online (Sandbox Code Playgroud)
... 容器只是一个容器名称的枚举(有几个):
Public Enum Containers
CallerWavs
CampaignImports
Delve
Exports
CampaignImages
Logos
ReportLogos
WebLinkImages
End Enum
Run Code Online (Sandbox Code Playgroud)
......是的,他们有大写字符,这会导致问题.在它熄灭之前,所有东西都被迫小写.
此外,我确实验证了正确的AzureConnectionString来自我的设置类.再一次,我尝试了一些在别处工作的东西.而这个也适用于其他地方!
Gau*_*tri 19
请检查有问题的服务器上的时钟.除了错误的帐户密钥,如果服务器上的时间与存储服务器上的时间不同,您还可能会收到403错误(允许或允许+/- 15分钟的偏差).
| 归档时间: |
|
| 查看次数: |
9587 次 |
| 最近记录: |