【问题标题】:Azure Service Fabric FabricObjectClosedExceptionAzure Service Fabric FabricObjectClosedException
【发布时间】:2016-10-21 19:47:26
【问题描述】:

我有一个有状态的服务,可以将内容存储在 IReliableDictionary 中。部署到本地集群后,我重新启动了主节点以测试故障转移,但是,在我这样做之后,代码 StateManager.GetOrAddAsync>("MyDictionary") 会抛出 FabricNotPrimaryException,然后在以后的试验中会抛出 FabricObjectClosedException。我可以检查哪些内容来解决此问题?

【问题讨论】:

    标签: c# azure service-fabric-stateful


    【解决方案1】:

    解决此类错误的基本方法是捕获并记录抛出的异常:

    try
    {
        using (var tx = StateManager.CreateTransaction())
        {
            await dictionary.AddOrUpdateAsync(tx, dto.Id, dto, (key, _) => dto);
            await transaction.CommitAsync();
        }
    }
    catch (FabricObjectClosedException ex)
    {
        ServiceEventSource.Current.Message(ex.ToString());
        throw; // Pass the exception up as we only log it here.
    }
    

    但是,您的问题可能是一个非常简单的错字,例如 DTO 类中缺少 [DataContractAttribute]。在这种情况下,简单地调试问题以快速理解和解决问题可能会更容易。为此,您应该将 System.Fabric.FabricObjectClosedException 添加到 Visual Studio,然后在调试器中启用“抛出时中断”:

    1. 显示异常设置窗口(调试 > Windows > 异常设置
    2. 在异常类别列表中选择Common Language Runtime Exceptions类别
    3. 点击绿色的+(加号)按钮添加新的异常类型
    4. 在文本框中输入 System.Fabric.FabricObjectClosedException 并点击 enter

    添加新的异常类型时,抛出时中断复选框已被选中。

    下次您在调试器中执行应用程序时,调试器将在抛出 FabricObjectClosedException 时中断,您应该能够理解出了什么问题。

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 2015-09-17
      • 2017-09-02
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2018-03-14
      • 2016-05-16
      相关资源
      最近更新 更多