asp.net – 403从WindowsAzure.Storage生产错误
我有一个使用
WindowsAzure.Storage API v3的WebForms应用程序.它在开发和一个生产环境中工作正常,但是我正在推出一个新的实例,任何调用Azure Blob Storage的代码给我一个403错误.
我一直在玩这个一段时间,并且在Blob Storage的任何一个电话都失败了,所以我不会显示我的代码,我会显示我的堆栈跟踪: [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,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:DevnSourceObsidianSourceObsidianDataAzureStorage.vb:84 ObsidianWeb.Leads.HandleListenLink(String fileName,HyperLink link) in D:DevnSourceObsidianSourceObsidianWebBdcLeads.aspx.vb:188 ObsidianWeb.Leads.LoadEntity_ContactDetails(BoLead lead) in D:DevnSourceObsidianSourceObsidianWebBdcLeads.aspx.vb:147 ObsidianWeb.Leads.LoadEntity(BoLead Lead) in D:DevnSourceObsidianSourceObsidianWebBdcLeads.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 这是我试过的 >在这种环境中失败的AzureStorageConnectionString肯定在生产中有效 有任何想法吗?这应该是使用端口80或443,对吗?所以应该没有办法这样的网络问题.让我知道,如果这是错的. >工作生产机器是Azure VM(具有IIS 7.5的Server 2008 R2) 更新:有人要求看代码.好吧,我写了一个名为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 …容器只是一个容器名称枚举(有几个): Public Enum Containers CallerWavs CampaignImports Delve Exports CampaignImages Logos ReportLogos WebLinkImages End Enum …是的,他们有大写字符,这会导致问题.一切都出来之前被迫小写. 此外,我确实验证了正确的AzureConnectionString从我的设置类中出来.再次,我尝试了其他一些工作.这个也在其他地方工作! 解决方法
请检查有问题的服务器上的时钟.除了不正确的帐户密钥,如果服务器上的时间与存储服务器上的时间不同步,则还可以获取403错误(允许或占用/ – 15分钟偏差).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何通过render事件禁用CalendarExtender控件中
- ASP.NET Base-64字符串中的字符无效
- asp.net-mvc – Server 2008 R2上的MVC – 如何?
- asp.net – Windows 2012 SERVER – 为ADO.NET提供程序找不
- asp.net – 使用“IN”SQL函数中的值将逗号分隔值从.NET传递
- asp.net-mvc – 在视图ASP.NET MVC 4中禁用所需的特定于验证
- ASP.NET MVC6:以编程方式设置webroot
- asp.net-mvc – 绕过asp.net mvc中特定类型的DataAnnotatio
- asp.net-mvc-3 – 使用Jquery Ajax渲染部分视图与变量数据
- asp.net – 获取Gridview中隐藏列的值