以下代码是为Windows Azure表存储服务编写的:
var context = GetTableServiceContext();
context.AttachTo(_tableName, entity, eTag);
context.UpdateObject(entity);
var response = context.SaveChangesWithRetries(saveChangesOptions);
如果eTag与表存储中的实体不匹配,我对此代码的目标是抛出http状态代码412(前提条件失败)。这将用于控制并发更新。我在执行SaveChangesWithRetries
时遇到了一些奇怪的行为。根据传入的eTag
参数的值,将发生以下情况:
eTag
= W /“datetime'2010-08-17T23%3A43%3A26.1913755Z'” - >假设这个eTag不匹配,那么我将得到一个412.完美,这就是我想要的。
eTag
= W /“WrongETag” - >我将收到状态代码为400的DataServiceRequestException。唯一的错误消息是“无效输入”
eTag
=“wrongETag” - >与上述相同
似乎azure表服务需要比HTTP标准要求更严格格式的eTag。所有应该要求的是带引号的字符串,如果它是弱的,则带有可选的W /前缀。有人知道Azure表服务所需的特定格式吗?侧注:奇怪的是,将上述ETag与Azure的Blob服务一起使用就像预期的那样。