Azure Table 存储、ExecuteBatchAsync、操作的意外响应代码:0
Azure Table Storage, ExecuteBatchAsync, Unexpected response code for operation : 0
通过利用 Windows Azure SDK,我尝试使用 CloudTable.ExecuteBatchAsync 和 TableBatchOperations 插入实体。
序列化为Json的实体:
{
"LastAccessDate":"2015-02-27T00:00:00Z",
"Title":"Google open-sources HTTP/2-based RPC framework",
"PublicationDate":"0001-01-01T00:00:00",
"Id":"tag:theregister.co.uk,2005:story/2015/02/27/google_opensources_http2based_rpc_framework/",
"LastUpdatedDate":"2015-02-27T00:00:00Z",
"FeedUrl":"http://www.theregister.co.uk/software/developer/headlines.atom",
"Url":"http://go.theregister.com/feed/www.theregister.co.uk/2015/02/27/google_opensources_http2based_rpc_framework/",
"PartitionKey":"http%3a%2f%2fwww.theregister.co.uk%2fsoftware%2fdeveloper%2fheadlines.atom",
"RowKey":"http%3a%2f%2fgo.theregister.com%2ffeed%2fwww.theregister.co.uk%2f2015%2f02%2f27%2fgoogle_opensources_http2based_rpc_framework%2f",
"Timestamp":"0001-01-01T00:00:00+00:00",
"ETag":null
}
此 POCO 实体代表:
public class SyndicationFeedArticle : TableEntity
{
public virtual DateTime LastAccessDate { get; set; }
public virtual string Title { get; set; }
public virtual DateTime PublicationDate { get; set; }
public virtual string Id { get; set; }
public virtual DateTime LastUpdatedDate { get; set; }
public virtual string FeedUrl { get; set; }
public virtual string Url { get; set; }
}
当从 RSS xml 处理构建实体时,问题就出现了。插入的 ExecuteBatch 抛出 Unexpected response code for operation : 0
。我明白这意味着索引 0 处的批处理操作失败了。通常这是分区键或行键不正确的问题,例如包含无效字符(上述情况并非如此)或大小超过 1kb,在这种情况下不适用。
这是让我困惑的地方:
- 单元测试和业务代码实体(虽然构造不同)生成完全相同的Json序列化数据
- 两个过程(手动
new()
创建和 RSS 业务代码)在单元测试中运行良好
- 在模拟器上存储时完全没有问题,仅在 Azure Cloud 中失败。
我正在寻找有关如何解决此问题的指示。我在单元测试中重新创建了各种场景,并确保我的实体不会破坏键的约束,但没有运气。我的主要问题是为什么我不能在模拟器和云之间获得恒定的行为。这真的可以帮助我解决问题,或者至少可以为我指明解决此问题的另一种方法。
谢谢!
好的,明白了。
在这种特定情况下会发生什么:
PublicationDate
使用 DateTimeOffset.Date 作为可以设置为 MinValue 的源值进行实例化。 table 存储不支持 DateTime 列的 MinValue。
<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:9e74bf7a-0002-004e-1142-16dabb000000 Time:2015-02-28T02:01:42.2124803Z</message>
</error>
我将实体 属性 更改为 DateTime?
并将其作为业务规则进行管理。当然,我想知道为什么在本地模拟器上支持这个...
通过利用 Windows Azure SDK,我尝试使用 CloudTable.ExecuteBatchAsync 和 TableBatchOperations 插入实体。
序列化为Json的实体:
{
"LastAccessDate":"2015-02-27T00:00:00Z",
"Title":"Google open-sources HTTP/2-based RPC framework",
"PublicationDate":"0001-01-01T00:00:00",
"Id":"tag:theregister.co.uk,2005:story/2015/02/27/google_opensources_http2based_rpc_framework/",
"LastUpdatedDate":"2015-02-27T00:00:00Z",
"FeedUrl":"http://www.theregister.co.uk/software/developer/headlines.atom",
"Url":"http://go.theregister.com/feed/www.theregister.co.uk/2015/02/27/google_opensources_http2based_rpc_framework/",
"PartitionKey":"http%3a%2f%2fwww.theregister.co.uk%2fsoftware%2fdeveloper%2fheadlines.atom",
"RowKey":"http%3a%2f%2fgo.theregister.com%2ffeed%2fwww.theregister.co.uk%2f2015%2f02%2f27%2fgoogle_opensources_http2based_rpc_framework%2f",
"Timestamp":"0001-01-01T00:00:00+00:00",
"ETag":null
}
此 POCO 实体代表:
public class SyndicationFeedArticle : TableEntity
{
public virtual DateTime LastAccessDate { get; set; }
public virtual string Title { get; set; }
public virtual DateTime PublicationDate { get; set; }
public virtual string Id { get; set; }
public virtual DateTime LastUpdatedDate { get; set; }
public virtual string FeedUrl { get; set; }
public virtual string Url { get; set; }
}
当从 RSS xml 处理构建实体时,问题就出现了。插入的 ExecuteBatch 抛出 Unexpected response code for operation : 0
。我明白这意味着索引 0 处的批处理操作失败了。通常这是分区键或行键不正确的问题,例如包含无效字符(上述情况并非如此)或大小超过 1kb,在这种情况下不适用。
这是让我困惑的地方:
- 单元测试和业务代码实体(虽然构造不同)生成完全相同的Json序列化数据
- 两个过程(手动
new()
创建和 RSS 业务代码)在单元测试中运行良好 - 在模拟器上存储时完全没有问题,仅在 Azure Cloud 中失败。
我正在寻找有关如何解决此问题的指示。我在单元测试中重新创建了各种场景,并确保我的实体不会破坏键的约束,但没有运气。我的主要问题是为什么我不能在模拟器和云之间获得恒定的行为。这真的可以帮助我解决问题,或者至少可以为我指明解决此问题的另一种方法。
谢谢!
好的,明白了。 在这种特定情况下会发生什么:
PublicationDate
使用 DateTimeOffset.Date 作为可以设置为 MinValue 的源值进行实例化。 table 存储不支持 DateTime 列的 MinValue。
<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:9e74bf7a-0002-004e-1142-16dabb000000 Time:2015-02-28T02:01:42.2124803Z</message>
</error>
我将实体 属性 更改为 DateTime?
并将其作为业务规则进行管理。当然,我想知道为什么在本地模拟器上支持这个...