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?