Azure CloudBlobContainer.CreateIfNotExists()在本地开发上抛出Forbidden(403)

时间:2017-08-30 15:18:49

标签: azure azure-storage azure-storage-blobs azure-storage-emulator

我开始在blobContainer.createIfNotExists上获得403错误。以下是源代码。

#include <thread>
#include <iostream>

class Boo
{
public:
    void run()
    {
        int i = 10;
        while(i--)
        {
            std::cout << "boo\n";;
        }
    }
};

class Foo
{
public:
    void run()
    {
        t1 = std::thread(&Boo::run,boo);   // threads already default constructed
        t2 = std::thread(&Foo::user,this); // so need to *assign* them 
    }

    void user()
    {
        int i = 10;
        while(i--)
        {
            std::cout << "foo\n";;
        }
    }

    ~Foo()
    {
        t1.join();
        t2.join();
    }

private:
    std::thread t1;
    std::thread t2;
    Boo boo;
};

int main()
{
    Foo foo;
    foo.run();
}

验证的事情:

  • 容器名称小写&amp;确认标准
  • 可以在Storage Explorer中访问本地blob存储,并且可以正常阅读/上传内容
  • 连接字符串是: add key =&#34; StorageConnectionString&#34;值=&#34; UseDevelopmentStorage =真&#34;

预计升级库可能会解决问题:

  • 将存储模拟器升级到5.2
  • 将Nuget软件包WindowsAzure.Storage升级到8.4.0(早先是8.1.0,但已经出错了)

例外截图如下:

enter image description here

更新

显然,我刚刚从https://github.com/Azure-Samples/storage-blob-dotnet-getting-started.git下载了样本,这也是有效的。当我比较我的项目中的cloudBlobClient对象和示例项目时,我发现由于一些奇怪的原因,我发现blobClient(在我的项目中)丢失了&#34; AuthenticationHandler&#34;和#34; Key&#34;哪会引起这个问题。但是这两个值存在于示例项目中。

enter image description here

1 个答案:

答案 0 :(得分:2)

  

在blobContainer.createIfNotExists上获得403错误

我创建了一个示例来重现我的问题,代码可以正常安装WindowsAzure.Storage sdk v8.1.0 v8.1.4 V8.4.0

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true");

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

container.CreateIfNotExists();

我还使用WindowsAzure.Storage v7.0.0测试代码,它也可以。

此外,一些社区成员报告说,如果在项目中安装了 ApplicationInsights ,则执行存储操作时WindowsAzure.Storage sdk会返回403错误,此SO thread进行了讨论。