次のコードは、Windows Azure テーブル ストレージ サービス用に記述されています。
var context = GetTableServiceContext();
context.AttachTo(_tableName, entity, eTag);
context.UpdateObject(entity);
var response = context.SaveChangesWithRetries(saveChangesOptions);
このコードでの私の目標は、eTag がテーブル ストレージ内のエンティティと一致しない場合に 412 (前提条件が失敗した) の HTTP ステータス コードをスローすることです。これは、同時更新を制御するために行われます。を実行すると、奇妙な動作が発生し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 テーブル サービスに必要な特定の形式を知っている人はいますか? 補足: 奇妙なことに、Azure の Blob サービスで上記の ETag を使用すると、期待どおりに動作します。