Ich habe eine Dockerfile für mein .NET-Programm erstellt. Das Programm läuft auf meinem Desktop und auf einem Windows Server 2016 (Azure VM) ohne Docker einwandfrei. Wenn ich versuche, es als Container auszuführen (basierend auf microsoft/windowsservercore), erhalte ich häufig Datenbankfehler, wenn ich mich mit meinen Azure SQL-Instanzen verbinde.Windows-Container führen dazu, dass Azure SQL-Verbindungen fehlschlagen
Ich habe zwei Azure SQL-Instanz ausgeführt (P1 und keine Last). Wenn eine Verbindung hergestellt werden kann, sind sie ziemlich schnell, aber das Problem besteht darin, dass die Verbindung oft nicht hergestellt werden kann. Es sieht so aus, als ob das Netzwerk sehr instabil ist. Dies sind typische Fehler, die auf mich geworfen werden:
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Die innere Ausnahme berichtet Der Netzwerkpfad wurde nicht gefunden. Zuerst dachte ich, es könnte meine lokale Maschine sein, aber es hat auch Probleme auf der Windows Server 2016 (mit Containern) VM-Instanz in Azure.
Um das Problem zu lokalisieren, habe ich ein Testprogramm erstellt, das alle 5 Sekunden eine Verbindung zu meinen Datenbanken herstellt (und SELECT COUNT(*) from sysobjects
ausführt). Dieses Programm findet immer die Datenbank.
Es scheint, dass mein anderes Programm oft während des Starts fehlschlägt, aber während der Initialisierung gibt es viele Datenbankaufrufe. Ich vermute, etwas ist anders mit Threading, Verbindungspooling, ...
Wer ein Hinweis?
Named Pipes liefert erste in der Reihenfolge der Protokolle ist, die SQL versucht, wenn Sie nicht explizit Protokoll festgelegt haben zu verwenden. Sie müssen also SQL erzwingen, TCP zu verwenden, wenn Sie zuerst versuchen wollen, die Netpipes auszuprobieren. –