在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)内部服务器错误。

我尝试过:

  1. 确保我的WindowsAzure.Storage nuget包是最新版本(6.2.0)
  2. 重新安装适用于VS2015 2.8.1的Azure SDK(并确保它是最新版本)
  3. 通过Azure存储模拟器命令行工具停止、清除和启动Azure存储模拟器(似乎工作正常,没有错误)
  4. 通过异常的".InerException.response.GetResponseStream()"读取web响应的流。此操作失败,并出现一个异常,状态为"流不可读"
  5. 重新启动我的机器(绝望情绪袭来)

我的把戏越来越少了。有人遇到过这个问题吗?

在Azure存储模拟器中创建表会产生HTTP 500错误

我解决了这个问题。我不得不彻底清除我现有的本地存储模拟实例。使用"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中)。