我的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
对于排除仿真程序问题,我的建议是首先确保安装了最新版本的仿真程序。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;
}