Microsoft.WindowsAzure.Storage 4.0.1和Windows Storage Emulato

本文关键字:Storage Windows Emulato WindowsAzure Microsoft | 更新日期: 2023-09-27 18:06:57

我的Microsoft.WindowsAzure.Storage库升级到4.0.1版本后,存储模拟器出现问题。

以下代码:

var client = CloudStorageAccount.Parse(connectionString).CreateCloudTableClient();
var table = client.GetTableReference("TableName");
table.CreateIfNotExists();

调用table.CreateIfNotExists()抛出一个StorageException,详细信息:

消息:The remote server returned an error: (400) Bad Request.

InnerException。Response:其中一个HTTP报头的值不是格式正确

我知道之前使用3的问题。X客户端库与2.0版本的模拟器(或类似的东西),并能够解决它。

连接到真实的表服务工作正常,所以它与模拟器有关。

任何想法?

编辑:对于那些正在寻找的人,模拟器的3.2版本的直接下载链接在这里- http://download.microsoft.com/download/0/F/1/0F162192-CDE5-413D-8DC0-37F41300B47B/WindowsAzureStorageEmulator.msi

Microsoft.WindowsAzure.Storage 4.0.1和Windows Storage Emulato

对于排除仿真程序问题,我的建议是首先确保安装了最新版本的仿真程序。400响应通常意味着您的客户端库版本较新,并且正在尝试执行在您的模拟器版本中尚未实现的操作。

有关最新版本的更多信息,请参阅此处。

杰森

我被同一个问题难住了好几个小时。我针对我的解决方案配置了Azure SDK 2.3,并运行旧的v1.7 StorageClient -值得注意的是,一切都可以找到,但我需要升级存储库以使用一些新功能。无论如何,在删除v1.7 StorageClient并在新的存储库上做NuGet后,我发现我有这个错误。最后,我尝试了所有方法:

  • 我的队列的双重检查名称
  • 手动检查存储客户端程序集的每个bin/obj文件夹,并删除周围的任何残留
  • 重新启动-因为我变得绝望

最后我只是重新安装了v2.3 Azure SDK,它修复了它。当我重新安装时,没有出现任何错误,一切正常。

因此,如果有疑问,请尝试重新安装SDK。

400错误本身并不能说明什么。获取异常RequestInformation。HttpStatusCode, RequestInformation.ExtendedErrorInformation. errorcode和RequestInformation.ExtendedErrorInformation。ErrorMessage,这将帮助你看到更多的细节(下面的代码示例)。

在调用模拟器之前,请确保您了解各种命名约束(例如分区键中禁止的字符,表名等),支持的数据类型(日期必须是UTC,不支持小数等)以及模拟器和Azure之间的差异,因为有几个。

try
{
    // do something
}
catch (StorageException ex)
{
    ApplicationException aex = new ApplicationException("StorageException in SaveTransactionsToAzure()", ex);
    aex.Source = "SaveTransactionsToAzure()";
    aex.Data.Add("HttpStatusCode", ex.RequestInformation.HttpStatusCode);
    aex.Data.Add("ErrorCode", ex.RequestInformation.ExtendedErrorInformation.ErrorCode);
    aex.Data.Add("ErrorMessage", ex.RequestInformation.ExtendedErrorInformation.ErrorMessage);
    throw aex;
}