尝试使用 Windows Azure 存储模拟器时收到 404 响应
Receiving 404 Response When Attempting to Use the Windows Azure Storage Emulator
问题
当我尝试使用存储模拟器 (v3.4.0.0) 时,我收到以下异常:
System.Net.WebException: The remote server returned an error: (404) Not Found.
具体来说,当我尝试与通过 blobClient.GetContainerReference( myContainerName )
创建的 CloudBlobContainer
实例交互时会发生这种情况。在这种情况下,当我尝试以下操作时会发生这种情况:
var permissions = await container.GetPermissionsAsync();
当我在执行此行之前调试代码并观察容器实例时,我可以看到对象的内部确实设置为使用模拟器,并且所有适当的 fields/properties 都与它们相同应该是(使用正确的 "devstoreaccount1" 帐户名等)。
知道为什么会这样吗?更好的是:我怎样才能让我的代码看到模拟器?
附加信息
- 存储模拟器是 运行,我已将其设置为使用我的本地 Sql Server 2012 实例,并且可以确认它已在数据库中创建了所有适当的表。
- 我尝试 ping
127.0.0.1:10000
但收到消息 "Ping request could not find host 127.0.0.1:10000. Please check the name and try again."
- 我也有一个 IIS 8.5 的本地实例 运行,但我想这不是问题所在。无论如何,我 运行 我的应用程序是通过 IIS,所以关闭它对我来说不是一个选项。
- 运行 在 Windows 8.1
问题不在于模拟器本身,而在于代码。虽然我在阅读的文档中没有看到任何解释这一点的内容,但似乎有必要在与容器对象交互之前调用 await container.CreateIfNotExistsAsync()
。
我认为这是因为它必须在应用任何设置之前物理创建容器。
如果容器不存在,那么模拟器和存储服务都会 return 404。话虽这么说 - 你不必在任何容器操作之前调用 CreateIfNotExists - 这可能非常好效率低下。根据您的情况,您有几种不同的方法。您可以创建一个初始化作业来初始化您的环境,从而创建您的应用程序所依赖的所有资源。或者,如果容器可能不存在(例如 - 如果您动态创建它们),那么您可以轻松地让您的应用程序处理 404,然后在此时创建容器。
问题
当我尝试使用存储模拟器 (v3.4.0.0) 时,我收到以下异常:
System.Net.WebException: The remote server returned an error: (404) Not Found.
具体来说,当我尝试与通过 blobClient.GetContainerReference( myContainerName )
创建的 CloudBlobContainer
实例交互时会发生这种情况。在这种情况下,当我尝试以下操作时会发生这种情况:
var permissions = await container.GetPermissionsAsync();
当我在执行此行之前调试代码并观察容器实例时,我可以看到对象的内部确实设置为使用模拟器,并且所有适当的 fields/properties 都与它们相同应该是(使用正确的 "devstoreaccount1" 帐户名等)。
知道为什么会这样吗?更好的是:我怎样才能让我的代码看到模拟器?
附加信息
- 存储模拟器是 运行,我已将其设置为使用我的本地 Sql Server 2012 实例,并且可以确认它已在数据库中创建了所有适当的表。
- 我尝试 ping
127.0.0.1:10000
但收到消息 "Ping request could not find host 127.0.0.1:10000. Please check the name and try again." - 我也有一个 IIS 8.5 的本地实例 运行,但我想这不是问题所在。无论如何,我 运行 我的应用程序是通过 IIS,所以关闭它对我来说不是一个选项。
- 运行 在 Windows 8.1
问题不在于模拟器本身,而在于代码。虽然我在阅读的文档中没有看到任何解释这一点的内容,但似乎有必要在与容器对象交互之前调用 await container.CreateIfNotExistsAsync()
。
我认为这是因为它必须在应用任何设置之前物理创建容器。
如果容器不存在,那么模拟器和存储服务都会 return 404。话虽这么说 - 你不必在任何容器操作之前调用 CreateIfNotExists - 这可能非常好效率低下。根据您的情况,您有几种不同的方法。您可以创建一个初始化作业来初始化您的环境,从而创建您的应用程序所依赖的所有资源。或者,如果容器可能不存在(例如 - 如果您动态创建它们),那么您可以轻松地让您的应用程序处理 404,然后在此时创建容器。