14 Stimmen

Wie kann ich einen plötzlichen Verlust der Verbindung zu SQL Azure in meiner Azure-Rolle beheben?

Meine Azure-Rolle holt Material zur Verarbeitung aus einer Datenbank - enthält es eine Instanz von System.Data.SqlClient.SqlConnection und erstellt in regelmäßigen Abständen eine SqlCommand Instanz und führt eine SQL-Abfrage aus.

Ab und zu (in der Regel einmal in mehreren Tagen) löst die Ausführung einer Abfrage eine SqlException Ausnahme

Der Dienst ist bei der Bearbeitung Ihrer Anfrage auf einen Fehler gestoßen. Bitte versuchen Sie es erneut. Fehlercode 40143. Bei dem aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten. Die Ergebnisse, sofern vorhanden, sollten verworfen werden.

Das habe ich schon oft gesehen und jetzt fängt mein Code es auf, ruft Dispose() über die SqlConnection Instanz, öffnet dann die Verbindung erneut und versucht die Abfrage erneut. Letzteres führt in der Regel zu einer weiteren SqlException Ausnahme

Die Zeitüberschreitung ist abgelaufen. Die Timeout-Periode ist abgelaufen, bevor der Vorgang abgeschlossen werden konnte, oder der Server antwortet nicht.

Das sieht ziemlich danach aus, dass der SQL Azure-Server nicht reagiert oder aus irgendeinem Grund nicht verfügbar ist.

Derzeit fängt mein Code die letztgenannte Ausnahme nicht ab, sie wird nach außen weitergegeben RoleEntryPoint.Run() und die Rolle wird neu gestartet. Der Neustart dauert in der Regel etwa zehn Minuten, und sobald er abgeschlossen ist, ist das Problem für einen Tag oder so verschwunden.

Ich mag es nicht, wenn meine Rolle neu gestartet wird - es dauert eine Weile und die Funktionalität meines Dienstes ist beeinträchtigt. Ich würde gerne etwas Intelligenteres machen.

Was wäre eine Strategie zur Lösung dieses Problems? Sollte ich die Abfrage mehrmals wiederholen und wie oft und in welchem Intervall? Sollte ich etwas anderes tun? Wann sollte ich aufgeben und die Rolle einfach neu starten lassen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X