我正在使用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表存储中的有效值?!
答案 0 :(得分:0)
原来支持的DateTime范围从公元1601年1月1日午夜12点开始。范围于9999年12月31日结束。
仅供参考:MSDN提供了下表,详细说明了Azure表存储中数据类型的数据范围: