【问题标题】:Receiving 404 Response When Attempting to Use the Windows Azure Storage Emulator尝试使用 Windows Azure 存储模拟器时收到 404 响应
【发布时间】:2015-03-07 05:26:23
【问题描述】:

问题

当我尝试使用存储模拟器 (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 上运行

【问题讨论】:

    标签: azure-storage azure-storage-emulator


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果容器不存在,那么模拟器和存储服务都会返回 404。话虽如此 - 您不必在任何容器操作之前调用 CreateIfNotExists - 这可能非常低效。根据您的情况,您有几种不同的方法。您可以创建一个初始化作业来初始化您的环境,从而创建您的应用程序所依赖的所有资源。或者,如果容器可能不存在(例如 - 如果您正在动态创建它们),那么您可以轻松地让您的应用程序处理 404,然后在该点创建容器。

      【讨论】:

      • 感谢您的回答。在这种情况下,每个容器都会在新用户注册我们的应用程序时创建,因此我们不知道在初始化时需要哪些容器 - 我可以修改我们的代码以确保同时创建容器与用户帐户一样(在上传任何 blob 之前)。我认为这将是一种最大限度地减少效率低下的策略,你觉得这听起来合理吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2014-05-18
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      相关资源
      最近更新 更多