【发布时间】:2015-09-23 22:10:52
【问题描述】:
我正在使用Azure Table Storage SDK,我可以很好地读取和删除实体,但插入操作会给我以下 XmlException。有什么想法吗?
An exception of type 'System.Xml.XmlException' occurred in System.Xml.dll but was not handled in user code
Additional information: Data at the root level is invalid. Line 1, position 1.
这是我的插入代码:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=myKey");
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("positions");
await table.CreateIfNotExistsAsync();
var p = new PositionEntity("test", Guid.NewGuid().ToString());
TableOperation insertOperation = TableOperation.Insert(p);
var result = table.ExecuteAsync(insertOperation).ContinueWith(t =>
{
if (t.Exception != null)
{
// read Exception here...
var x = RequestResult.TranslateFromExceptionMessage(t.Exception.Message);
}
});
注意:我在 DNX 4.5.1 上运行。
编辑:
事实证明,我的 PositionEntity 有一个未设置的 DateTimeOffset 属性。它不可为空,因此使用默认的 DateTimeOffset 值进行实例化。如果我在发送之前手动设置 Date 属性,则插入工作正常。
var p = new PositionEntity("test", Guid.NewGuid().ToString());
p.Date = DateTime.Now; // <-- This is required if default. Default value doesn't work!
这是来自 Azure 的原始响应:
<?xml version="1.0" encoding="utf-8"?><error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code>OutOfRangeInput</code><message xml:lang="en-US">One of the request inputs is out of range. RequestId:eeb6ed0c-0002-001f-48f5-f64ea4000000 Time:2015-09-24T18:18:32.8854764Z</message></error>
有谁知道为什么默认的 DateTimeOffset 值({01/01/0001 12:00:00 AM +00:00})在 Azure 表存储中不是有效值?!?
【问题讨论】:
-
您是否可以通过 Fiddler 或浏览器开发工具跟踪请求/响应并查看通过网络发送的内容?这肯定有助于诊断这个问题。