尝试使用Windows Azure存储模拟器时接收404响应

时间:2015-03-05 18:29:03

标签: azure-storage azure-storage-emulator

问题

当我尝试使用存储模拟器(v3.4.0.0)时,收到以下异常:

System.Net.WebException: The remote server returned an error: (404) Not Found.

具体而言,当我尝试与CloudBlobContainer实例进行交互时,会发生这种情况,该实例是通过blobClient.GetContainerReference( myContainerName )创建的。在这种情况下,当我尝试以下操作时会发生这种情况:

var permissions = await container.GetPermissionsAsync();

当我调试代码并在执行此行之前观察容器实例时,我可以看到对象的内部确实设置为使用模拟器并且所有适当的字段/属性都是如此应该是(使用正确的" devstoreaccount1"帐户名等)。

知道为什么会这样吗?更好的是:如何让我的代码看到模拟器?

其他信息

  • 存储模拟器正在运行,我已将其设置为使用我的本地Sql Server 2012实例,并且可以确认它已在数据库中创建了所有相应的表。
  • 我尝试ping 127.0.0.1:10000但收到消息" Ping请求找不到主机127.0.0.1:10000。请检查姓名,然后重试。"
  • 我有一个运行IIS 8.5的本地实例,但我想这不是问题所在。无论如何,我通过IIS运行我的应用程序,所以关闭它不是我的选择。
  • 在Windows 8.1上运行

2 个答案:

答案 0 :(得分:8)

问题不在于模拟器本身,而在于代码。虽然我没有在我阅读的文档中看到任何解释这一点的内容,但似乎有必要在与容器对象交互之前调用await container.CreateIfNotExistsAsync()

我认为这是因为它必须在对其应用任何设置之前物理创建容器。

答案 1 :(得分:1)

如果容器不存在,那么模拟器和存储服务都将返回404.这就是说 - 您不必在任何容器操作之前调用CreateIfNotExists - 这可能效率非常低。根据您的场景,您有几种不同的方法。您可以创建初始化作业,初始化您的环境,创建应用程序所依赖的所有资源。或者,如果容器可能不存在(例如 - 如果您是动态创建容器),则可以轻松地让应用程序处理404,然后在该点创建容器。