8

我一直在尝试通过我机器的 Azure 存储模拟器创建一个表。我可以使用仅使用 WindowsAzure.Storage 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. 重新安装 Azure SDK for VS2015 2.8.1(并确保它是最新版本)
  3. 通过 Azure Storage Emulator 命令行工具停止、清除、启动 Azure Storage Emulator(似乎工作正常,没有错误)
  4. 通过异常的“.InnerException.Response.GetResponseStream()”读取 Web 响应的流。这会失败,但会出现“流不可读”的异常。
  5. 重新启动我的机器(绝望开始了)

我的花招快用完了。有人遇到过这个问题吗?

4

2 回答 2

8

我解决了。我不得不彻底清除我现有的本地存储仿真实例。使用“AzureStorageEmulator.exe clear”或“AzureStorageEmulator.exe init”是不够的。即使卸载 Azure SDK 也是不够的。

我首先停止存储仿真:

AzureStorageEmulator.exe stop
AzureStorageEmulator.exe clear
AzureStorageEmulator.exe init /forceCreate

最后一个命令出错并指示它无法创建数据库。

然后我删除了(实际上,我重命名了它们)这些剩余的文件,这些文件构成了 azure 存储模拟器后面的数据库:

  • C:\Users\[我]\AzureStorageEmulatorDb42_log.ldf
  • C:\Users\[我]\AzureStorageEmulatorDb42_log.mdf

最后,我启动了模拟器备份

AzureStorageEmulator.exe init /forceCreate
AzureStorageEmulator.exe start

成功!

我不确定是什么让我陷入了这种情况,但我最好的猜测是这是由最近升级 Azure SDK 引起的。

于 2016-01-07T19:54:00.990 回答
0

我认为在很多情况下,约翰尼的回答会解决这个问题。

在我的情况下,这也不起作用,因为 AzStorageEmulator 没有创建数据库AzureStorageEmulator510(数据库实例(localdb)\MSSQLLocalDB),也没有创建其中的表。

所以我使用 SSMSAzureStorageEmulator510从头开始​​创建数据库,然后我发现旧版本AzureStorageEmulator57仍在我的 PC 上,所以我附加了它(您可以在 中找到数据库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)。

于 2021-11-09T09:28:53.560 回答