【问题标题】:Get entity details when StorageException is thrown抛出 StorageException 时获取实体详细信息
【发布时间】:2017-11-24 14:54:14
【问题描述】:

当对表和 blob 进行操作并且出现问题时,Azure 会抛出 StorageException.RequestInformation.ExtendedErrorInformation 会给你一些关于哪里出了问题的信息,例如在尝试向表中插入重复键时:

The specified entity already exists

有什么方法可以获取有关哪个实体导致异常的信息?

【问题讨论】:

  • Request​Result.​Extended​Error​Information 属性的类型为 StorageExtendedErrorInformation,其中包含一个名为 Additional​DetailsIDictionary <string, string>。字典是否有可能包含重复的实体/ID?
  • @AndrésNava-.NET 不,它实际上是空的!
  • 如果您使用程序来执行此操作,请尝试使用 fiddler 捕获详细错误信息。
  • @TomSun-MSFT 我希望以编程方式获取有关实体的信息,以便将其包含在错误日志中
  • 根据表服务的响应信息,我也无法获取已存在的实体。如果 TableOperation.InsertOrMerge(ITableEntity) 是可接受的,我们可以使用它来避免冲突。我们也可以将我们的feedback 提供给 Azure 存储团队

标签: azure azure-storage azure-blob-storage azure-table-storage


【解决方案1】:

目前,如果我们执行批量插入,似乎没有办法得到哪个细节实体导致了异常。

如果我们有任何想法,我们可以像您所做的那样向 Azure 团队提供反馈。

我还提到我们可以使用 TableOperation.InsertOrMerge(ITableEntity) 来避免冲突。

另一种解决方法是,如果可以接受一个接一个地插入实体,那么我们可以使用变量来记录当前插入的实体信息。如果有异常,我们可以自己记录详细信息。以下是sn-p演示代码:

var customEnity = new CustomEntity();
try
{
   foreach (var entity in list)
   {
       TableOperation insertOperation = TableOperation.Insert(entity);

        customEnity = entity;

       // Execute the insert operation.
       table.Execute(insertOperation);        
   }

 }
 catch (Exception)
 {

    //Do something
 }

【讨论】:

  • 我意识到我可以以不同的方式构建我的代码以确定哪个实体失败了,但它仍然很有用 - 即使对于 single 实体,而不仅仅是批量插入 - 如果异常包含有关失败实体的一些信息
  • 我同意你的看法。但如果是single 实体,那么我们可以轻松获取实体信息。
  • 如果你使用异步,不一定容易
  • 根据我的经验,我们可以使用await 来做到这一点。无论如何,如果我们能从 azure 存储服务端获得详细信息,那就太好了。
  • 在我的特殊情况下,我使用 F# 异步处理列表;至少如果你是 F# 菜鸟,它不像 C# 那样明显。
猜你喜欢
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2020-10-08
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多