2017-11-11 5 views
0

Wir haben hier einen merkwürdigen Fehler. In unserer ASP.NET 4.6 App, die Entity Framework 6.2 verwendet, erhalten wir beim Zugriff auf die SQL Azure-Datenbank "Anmeldung fehlgeschlagen für Benutzer". Ich bin mir ziemlich sicher, dass die Ursache des Fehlers darin besteht, Ebenen in Azure zu wechseln. Was ich nicht verstehe ist, warum der Fehler nicht aufgefangen wird. Jede SQL-Operation, die wir haben, befindet sich in einem try ... catch-Block. Die Fehler fallen aus dem Block und werden von Globals.asax kurz vor dem Absturz der App gefangen. Wir habenNicht behandelter Ausnahmefehler - Anmeldung fehlgeschlagen für Benutzer

SetExecutionStrategy("System.Data.SqlClient", Function() New SqlServer.SqlAzureExecutionStrategy(10, TimeSpan.FromSeconds(7))) 

, die, wie ich es verstehe, wird für mindestens 70 Sekunden nach dem ersten Fehler beliebigen SQL-Ausführung 10-mal wiederholen. Laut Microsoft Tech Support ist dies nicht aktiv, da die Verbindung zu SQL Azure noch nicht hergestellt wurde. Der ConnectRetryCount und das Intervall in der Verbindungszeichenfolge gelten nicht, da es mit dem Server kommuniziert. Der Server sagt nur: "Ich weiß, dass du da bist, aber ich werde dich nicht reinlassen!" Laut MS Tech-Support ist der einzige Weg, um einen Versuch zu haben ... catch Block um alle unsere SQL-Befehle ... was wir tun! Es fällt einfach durch und stürzt die App ab!

Ich kann keine Wiederholung in globals.asax, da zu diesem Zeitpunkt ist bereits abgestürzt. Nach MS gibt es keine Möglichkeit, den Fehler im Kontext abzufangen und von dort aus erneut zu versuchen. Also, was ist die Lösung? Es muss eine andere Antwort geben als: "Lass die App einfach abstürzen und lasse sie die Seite aktualisieren!"

Wenn die Seite Sekunden später aktualisiert wird, ist alles in Ordnung. Keine Fehler, keine Probleme.

Beispiel für eine der Zeilen Code werfen den Fehler:

MapTo = ctx.BrowserMaps.FirstOrDefault(Function(x) code.Contains(x.NameOrUserAgent)) 

Es ist wirklich sehr einfach. Dieser Code kommt nur sehr häufig vor, weil dieser Codeblock häufig aufgerufen wird. Die tatsächliche SQL-Anforderung ist irrelevant, da unabhängig davon, welche Zeile verwendet wird, die Verbindung in EF fehlschlägt.

Antwort

2

Server-Logins werden beim Up-/Down-Scaling auf eine neue Ebene getrennt, und Transaktionen werden zurückgesetzt. Geschlossene Datenbankanmeldungen bleiben jedoch während des Skalierungsprozesses verbunden, weshalb sie für Serveranmeldungen empfohlen werden.

Wenn Sie versuchen und fangen, wird das Problem möglicherweise nicht gelöst, weil Sie möglicherweise Fehler # 0 erfassen und viele Fehler in der Azure SQL-Datenbank auf diese Fehlerkategorie 0 fallen.

Nur ein Kommentar, die Leistung nach dem Skalieren kann direkt nach dem Skalieren schlecht sein und verbessert sich nach ein paar Minuten. Abfragepläne können sich ebenfalls ändern.

+0

Dies ist mehr oder weniger die Antwort. In unserem Fall haben wir versucht, eine try.catch im Konstruktor für das Modell zu setzen, um eine Wiederholungslogik zu erstellen. Wir suchen jetzt nach Datenbank-Logins, danke. –

Verwandte Themen