asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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:\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

这是我试过的

>在这种环境中失败的AzureStorageConnectionString肯定在生产中有效
>其他连接字符串(从另一个生产环境,它的工作)也在这里得到一个403
>在某些旧版本的REST api(我不直接使用…)中,时间戳似乎有问题,所以我确定时间是正确的,甚至尝试将服务器切换到UTC时间.
尝试在http / https之间切换连接字符串.
>升级到最新版本的API(v3.1)
尝试使用代码来确保Azure Storage的每一个呼叫都可以获得403.
>在绝望中,在服务器上安装Azure PowersHell只是为了验证与Azure的某种类型的通信是否正常工作.而且工作正常.
>浏览到天蓝色的管理门户,并且工作正常.

有任何想法吗?这应该是使用端口80或443,对吗?所以应该没有办法这样的网络问题.让我知道,如果这是错的.

>工作生产机器是Azure VM(具有IIS 7.5的Server 2008 R2)
服务器也有一些区别:
>这台新机器是物理硬件(Server 2012和IIS 8)
>这是在我的天蓝色订阅中使用不同的存储帐户,但是我已经尝试了3个连接字符串,没有一个在这里工作.

更新:有人要求看代码.好吧,我写了一个名为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 – 403从WindowsAzure.Storage生产错误全部内容,希望文章能够帮你解决asp.net – 403从WindowsAzure.Storage生产错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。