3

问题

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

2 回答 2

8

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

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

于 2015-03-06T11:50:38.423 回答
1

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

于 2015-03-06T21:26:23.543 回答