2016-03-23 4 views
1

Ich versuche zu testen, ob die Verbindungszeichenfolge mit Polly Null ist. Wenn es null ist, möchte ich dreimal mit dem CircuitBreaker versuchen und die Nachricht sollte im Konsolenfenster ausgegeben werden.Polly Circuit Breaker Muster - Zum Testen der Verbindungszeichenfolgen

Policy policy = null; 

// Break the circuit after the specified number of exceptions 
// and keep circuit broken for the specified duration. 
policy = Policy 
       .Handle<NullReferenceException>() 
       .CircuitBreaker(3, TimeSpan.FromSeconds(30)); 
try 
    { 
    string connected = policy.Execute(() => repository.GetConnectionString()); 
    } 

catch (Exception ex) 
     { 
     Console.WriteLine("{0}",ex.Message);    
     }  

und die GetConnectionString Methode ist:

public string GetConnectionString() 
    { 
     SqlConnection conn = new SqlConnection(); 
     conn.ConnectionString = ConfigurationManager.ConnectionStrings["Test1"].ConnectionString; 
     return conn.ConnectionString; 
    } 

Um dies zu testen, in der App.config ich die Verbindungszeichennamen geändert haben.

aber es scheint nicht Nullreference Ausnahme zu behandeln.

Wenn ich die Anwendung debuggen - Es öffnet CircuitBreakerEngine.cs nicht gefunden und druckt "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt".

Erwartet: Um Objektverweis nicht auf eine Instanz eines Objekts dreimal und teh Nachricht vom abgebrochenen Schaltung Ausnahme

Antwort

2

Ich glaube, Sie haben verstanden, was die CircuitBreaker Politik der Fall ist, wie beschrieben in dieser ähnliche Frage zu drucken: Polly framework CircuitBreakerAsync does not retry if exception occur

Ein Leistungsschalter leitet von sich aus keine Wiederholungen ein. Es existiert vielmehr die Maßnahme die Rate von Fehlern auf Delegaten, die durch es ausgeführt werden - und die Schaltung auslösen, wenn die Fehlerrate zu hoch wird. Da sein Zweck nur als messendes-und-brechendes Gerät ist, wiederholt es tatsächlich Ausnahmen von Delegierten, die durch es ausgeführt werden: folglich die NullReferenceException, die Sie sehen, wiederkommen.

EDIT: Dieses Verhalten des Schalters, und seine Differenz von Wiederholungs, auch deutlich in der Polly Wiki beschrieben, bei: https://github.com/App-vNext/Polly/wiki/Circuit-Breaker

zu tun, was ich denke, was Sie tun wollen, müssen Sie die Wiederholungsrichtlinie mit der Leistungsschalterrichtlinie zu kombinieren, wie unter Polly framework CircuitBreakerAsync does not retry if exception occur beschrieben. Polly bietet nun PolicyWrap an, um das Kombinieren von Richtlinien zu vereinfachen.

Verwandte Themen