将Microsoft.WindowsAzure.Storage库升级到版本4.0.1后,我遇到了存储模拟器的问题。
以下代码:
var client = CloudStorageAccount.Parse(connectionString).CreateCloudTableClient();
var table = client.GetTableReference("TableName");
table.CreateIfNotExists();
对table.CreateIfNotExists()
的调用会引发StorageException
,详细信息为:
消息:远程服务器返回错误:(400)错误请求。
InnerException.Response:其中一个HTTP标头的值不是 格式正确。
我知道使用3.x客户端库和模拟器版本2.0(或者沿着这些行的东西)的上一个问题,并且能够解决它。
连接到真实表服务工作正常,因此它与模拟器有关。
有什么想法吗?
编辑:对于那些看起来,3.2版本的模拟器的直接下载链接在这里 - http://download.microsoft.com/download/0/F/1/0F162192-CDE5-413D-8DC0-37F41300B47B/WindowsAzureStorageEmulator.msi
答案 0 :(得分:1)
我对模拟器问题进行故障排除的建议是首先确保安装了最新版本的模拟器。 400响应通常意味着您拥有更新版本的客户端库,并且正在尝试执行尚未在您的仿真器版本中实现的操作。
有关最新版本的详细信息,请参阅here。
杰森
答案 1 :(得分:0)
我被同样的问题难倒了好几个小时。我针对我的解决方案配置了 Azure SDK 2.3 ,并运行了旧的 v1.7 StorageClient - 值得注意的是,一切正常,但我需要升级存储库才能使用一些新功能。无论如何,在删除v1.7 StorageClient并在新存储库上执行NuGet之后,我发现我遇到了这个错误。最后我尝试了一切:
最后我刚刚重新安装了v2.3 Azure SDK并修复了它。重新安装时没有出现任何错误,它只是按预期工作。
因此,如果有疑问,请尝试重新安装SDK。
答案 2 :(得分:0)
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;
}