2016-10-20 3 views
1

Ich habe einen Stateful-Service, der Dinge in einem IReliableDictionary speichert. Nach dem Deployment auf den lokalen Cluster habe ich den primären Knoten neu gestartet, um das Failover zu testen. Der Code StateManager.GetOrAddAsync> ("MyDictionary") löst jedoch FabricNotPrimaryException aus. In späteren Tests wird FabricObjectClosedException ausgelöst. Was sind einige der Dinge, die ich überprüfen kann, um dies zu beheben?Azure Service Fabric FabricObjectClosedException

Antwort

1

Der grundlegende Weg, um Fehler wie diese zu beheben ist zu fangen und protokollieren die Ausnahme ausgelöst wird:

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. 
} 

jedoch Ihr Problem ein sehr einfachen Tippfehler wie eine fehlenden [DataContractAttribute] auf einer DTO-Klasse sein könnte. In diesem Fall ist es möglicherweise einfacher, das Problem einfach zu beheben, um das Problem schnell zu verstehen und zu beheben. Dazu müssen Sie die System.Fabric.FabricObjectClosedException zu Visual Studio sollten hinzufügen und dann aktivieren "brechen, wenn geworfen" im Debugger:

  1. Zeigen Sie die Exception Einstellungen Fenster (Debug>Windows->Exception Einstellungen)
  2. Wählen Sie die Common Language Runtime Exceptions Kategorie in der Liste der Ausnahmekategorien kategorien~~POS=HEADCOMP
  3. den grünen Klicken + (plus), um einen neuen Ausnahmetyp
  4. Typ System.Fabric.FabricObjectClosedException in dem Textfeld hinzuzufügen und schlug

eingeben Wenn ein neuer Ausnahmetyp die Pause hinzugefügt wird, wenn Geworfen Das Kontrollkästchen ist bereits aktiviert.

Das nächste Mal, wenn Sie Ihre Anwendung im Debugger ausführen, bricht der Debugger ab, wenn ein FabricObjectClosedException ausgelöst wird, und Sie sollten verstehen können, was schiefgelaufen ist.

Verwandte Themen