在Azure存储模拟器中创建表会产生HTTP 500错误
本文关键字:HTTP 错误 存储 Azure 模拟器 创建 | 更新日期: 2023-09-27 18:29:28
我一直试图通过我机器的Azure存储模拟器创建一个表。我可以用一个只使用WindowsAzure的非常简单的程序重新创建问题。存储nuget版本6.2.0:
using Microsoft.WindowsAzure.Storage;
namespace StorageEmulatorTest
{
internal class Program
{
private static void Main(string[] args)
{
var cloudStorageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true");
var cloudTableClient = cloudStorageAccount.CreateCloudTableClient();
cloudTableClient.GetTableReference("JohnnyTest").CreateIfNotExists();
}
}
}
25秒后,这将抛出一个类型为Microsoft.WindowsAzure.Storage.StorageException
的异常,只显示以下消息:
远程服务器返回错误:(500)内部服务器错误。
我尝试过:
- 确保我的WindowsAzure.Storage nuget包是最新版本(6.2.0)
- 重新安装适用于VS2015 2.8.1的Azure SDK(并确保它是最新版本)
- 通过Azure存储模拟器命令行工具停止、清除和启动Azure存储模拟器(似乎工作正常,没有错误)
- 通过异常的".InerException.response.GetResponseStream()"读取web响应的流。此操作失败,并出现一个异常,状态为"流不可读"
- 重新启动我的机器(绝望情绪袭来)
我的把戏越来越少了。有人遇到过这个问题吗?
我解决了这个问题。我不得不彻底清除我现有的本地存储模拟实例。使用"AzureStorageEmulator.exe clear"或"AzureStorage Emulator.exe init"是不够的。即使卸载Azure SDK也不够。
我首先停止了存储模拟:
AzureStorageEmulator.exe stop
AzureStorageEmulator.exe clear
AzureStorageEmulator.exe init /forceCreate
最后一个命令出错,表示无法创建数据库。
然后我删除了(实际上,我重命名了它们)这些剩余的文件,这些文件构成了azure存储模拟器后面的数据库:
- C: ''Users''[Me]''AzureStorageEmulatorDb42_log.ldf
- C: ''Users''[Me]''AzureStorageEmulatorDb42_log.mdf
最后,我启动了模拟器备份
AzureStorageEmulator.exe init /forceCreate
AzureStorageEmulator.exe start
成功!
我不确定是什么让我陷入这种境地,但我最好的猜测是,这是由Azure SDK最近的升级引起的。
我认为在很多情况下,Johnny的回答会解决问题。
在我的案例中,这也不起作用,因为AzStorageEmulator没有创建数据库AzureStorageEmulator510
(数据库实例(localdb)'MSSQLLocalDB
),也没有创建其中的表。
因此,我使用SSMS从头开始创建数据库CCD_ 4,然后我发现我的电脑上还有一个旧版本的AzureStorageEmulator57
,所以我把它连接起来(你可以在C:'Users'YOURACCOUNT
中找到数据库)——把数据库结构提取到一个SQL脚本中,并为AzureStorageEmulator510
运行它。
之后,我启动了模拟器,并使用AzStorageExplorer创建了一个新的blob容器。
出现错误500似乎是因为该数据库(及其内部结构)丢失,无法通过CLI命令AzureStorageEmulator.exe init /forceCreate
重新创建。
你可以检查的其他事情(可能的问题):
-
也可能是AzStorageEmulator无法访问其数据库。其中一个原因(以及如何修复)在这里进行了描述。
-
安装实例
(localdb)'MSSQLLocalDB
的更新版本后,可能是未附加相关数据库。这将导致一个奇怪的错误,如Cannot open database "AzureStorageEmulator510" requested by the login. The login failed. Login failed for user 'YOURACCOUNT'.
如果是这种情况,您可以通过SSMS简单地连接到localDb来修复它,然后附加数据库:右键单击数据库,在上下文菜单中选择Attach...
,然后在对话框中添加数据库文件(位于C:'Users'YOURACCOUNT
中)。