【问题标题】:What's a good method for verifying an Azure Table Insert operation?验证 Azure 表插入操作的好方法是什么?
【发布时间】:2018-09-27 19:17:19
【问题描述】:

到目前为止,我一直依赖 TableResult.HttpStatusCode = 204 作为 Insert 操作的积极结果:

TableResult.HttpStatusCode Property

如果实体已经存在,我会得到一个200,如果插入操作成功,我会得到一个204。我也尝试过在TableOperation 上使用echoContent 参数:

TableOperation.Insert Method

echoContent 在我的情况下没有返回任何内容,所以我不确定我是否做错了什么,或者我是否在追逐独角兽。我不确定echoContent 是否只是将您发送给它的数据发回,或者它是否真的回显了写入的实体。

有没有更好的验证方法?是我过于依赖 Azure Table 存储的 REST api 还是我们只有这些?

【问题讨论】:

  • 如果您正在执行插入操作并且实体已经存在,那么您应该返回Conflict (409) 状态码。您确定要返回200 状态码吗?

标签: c# azure azure-storage azure-table-storage


【解决方案1】:

我实际上是先执行读取操作,然后评估结果以查看我的代码中是否存在重复项。在没有先检查的情况下执行的插入操作确实返回了一个409,但是这是在调试由在现有实体之上插入导致的异常后发现的。

我的第一个代码是一个不太频繁的活动,更重要的是我检查重复的实体,这就是为什么我先读取,然后检查,然后插入。

我后面的代码来自一个接收大量数据的 API,我不想在插入之前通过查找和比较来增加事务的负担。

为了解决这个问题,我设置了一个 try/catch 块来监视 409 的特定异常类型:

catch (Microsoft.WindowsAzure.Storage.StorageException e) when (e.RequestInformation.HttpStatusCode == 409)
        {
            TableResult tableResult = new TableResult();
            tableResult.HttpStatusCode = e.RequestInformation.HttpStatusCode;
            tableResult.Result = e.Message;
            return tableResult;
        }

由于我的方法返回 TableResult 类型,我必须格式化一个新的 tableResult 以发送回调用方。在调用者上使用 switch 语句,我能够处理各种场景(成功/异常)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多