Laden...

provider: SNI_PN11, error: 26 - Error Locating Server/Instance Specified

12 Antworten
2,227 Aufrufe
Letzter Beitrag: vor 2 Jahren
provider: SNI_PN11, error: 26 - Error Locating Server/Instance Specified

Hallo zusammen

Ich habe mir eine Maui Blazor-Hybrid App in .NET 7 gebaut, welche ganz ordentlich was hermacht und lokal wunderbar läuft.
Nach der Installation der App auf einem anderen Windows 10 Pro x64 Server, erhalte ich die Fehlermeldung, dass der Sql-Server-Express (2019) nicht erreicht werden kann.

Error:
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: SNI_PN11, error: 26 - Error Locating Server/Instance Specified)

Über das Management Studio kann ohne Probleme eine Verbindung mit der entsprechenden Datenbank hergestellt werden.

Ich habe unterschiedlichste ConnectionStrings versucht:
- mit & ohne User+PW
- mit & ohne IP-Addresse
- mit & ohne Local Angabe

Geprüfte aber erfolgslose Connection-Strings:
- "Data Source=.\\SQLEXPRESS; Initial Catalog=DemoDatabase; User Id=SimpleUser; Password=SimpleUserPassword; TrustServerCertificate=True; Encrypt=False"
- "Data Source=.\\SQLEXPRESS; Initial Catalog=DemoDatabase; Integrated Security=True"
- "Data Source=DNS-Name\\SQLEXPRESS; Initial Catalog=DemoDatabase; Integrated Security=True; TrustServerCertificate=True; Encrypt=False"
- "Data Source=DNS-Name\\SQLEXPRESS; Initial Catalog=DemoDatabase; User Id=SimpleUser; Password=SimpleUserPassword; TrustServerCertificate=True; Encrypt=False"
- "Data Source=DNS-Name\\SQLEXPRESS; Initial Catalog=DemoDatabase; Integrated Security=True"
- "Data Source=DNS-Name\\SQLEXPRESS; Initial Catalog=DemoDatabase; User Id=sa; Password=sapassword; TrustServerCertificate=True; Encrypt=False"
- "Data Source=IP-Address\\SQLEXPRESS; Initial Catalog=DemoDatabase; User Id=sa; Password=sapassword; TrustServerCertificate=True; Encrypt=False"
- "Server=.\\SQLEXPRESS; Database=DemoDatabase; User Id=SimpleUser; Password=SimpleUserPassword; TrustServerCertificate=True; Encrypt=False"

SQL-Server Management Einstellungen:
- Ich habe die SQL Server Remote Einstellung geprüft
- Ich habe den SQL Port geprüft und versucht auf Default (1433) gestellt

SQL-Profiler
Bei allen versuchen wird kein Event im Trace-Log des SQL-Profiler geloggt

Registriert wird der DatabaseContext in meinem Projekt mittels:
builder.Services.AddDbContextFactory<DatabaseContext>((DbContextOptionsBuilder options) ⇒
options.UseSqlServer(connectionString));

Habt Ihr noch ein paar Ideen, was ich versuchen könnte, um eine erfolgreiche Datenbankverbindung herstellen zu können?

Gruss Dolce

Wer Rechtschreibfehler findet, darf sie behalten.

Was ist Dein Ziel? Dass die Client App sich direkt mit dem SQL Server verbindet? Oder ist das eine Server-Side App?
Wird nicht klar, weil Du von Hybrid sprichst.

Vorweg:
Wenn das durch den Client erfolgen soll, so ist das Setup falsch. Nur eine reine Server-Side-App darf sich mit dem SQL Server verbinden.
Eine Client App muss immer den Weg über eine API gehen. Sowohl aus Infrastruktur- wie auch aus Security-Sicht.

Ist es also eine Client App, dann ist die Fehlermeldung korrekt; der kennt schließlich lokal den SQL Server nicht.

Hallo Abt

Im Moment ist es noch eine Server-Side App, um dem Kunden etwas zum Klicken in die Hand zu geben, da die Rest-API noch nicht gebaut wurde.
Die Maui-App funktioniert bei mir ohne Probleme, wenn ich diese lokal installiere.

Cheers

Wer Rechtschreibfehler findet, darf sie behalten.

Klar, weil Du auch lokal Deinen SQL Server hast und Connection String auf lokal zeigt.
Das funktioniert so konzeptionell jedoch bei niemand anderem.

Das Konzept von MAUI Apps / hybriden Apps ist immer: Kommunikation über einen zentralen Service.
Das ist auch die Grundlage jedes Sicherheitskonzepts mit Datenbanken. Eine Datenbank darf "von Außen" nicht erreichbar sein.

Auch wenn ich die App mittels msix auf dem Server installiere und der SQL-Server auch auf diesem Server installiert ist?

Wer Rechtschreibfehler findet, darf sie behalten.

Wenn es eine reine lokale Desktop-App ist, dann kann sie sich natürlich mit dem lokalen SQL Server verbinden.
Dann ist es eben aber auch eine Desktop-App und keine hybride App.

Der Fehler 26 ist vermutlich der best dokumentierte SQL Fehler überhaupt und zu 99% ein Konfigurationsfehler: er ist halt nicht erreichbar.
Er ist aus, Netzwerk stimmt nicht, Setup stimmt nicht, Connection String stimmt nicht oder was auch immer. Fazit: SQL Server ist nicht erreichbar.

Abt hat vollkommen recht mit dem was er schreibt (wie so oft).

Die Frage die sich mir stellt:

Ist der SQL Server auf dem gleichen System installiert wo die App zum "rumklickern" hin soll?

Wenn nein, dann schau mal ob die Firewallregeln am Zielsystem stimmen (1433 TCP, 1434 UDP) und ob Pakete gedropped werden (=> Logeinstellungen in der Windows-Firewall für das jeweilige Profil).

Schau ebenfalls mal nach, ob in den SQL-Protokoll Einstellungen (services.msc...) TCP/IP / Named-Pipes aktiv ist. Ich habe in den letzten Jahren vermehrt feststellen müssen, dass die Kommunikation daran scheitert.

Der SQL Server ist auf dem selben Server installiert, auf welchem in der App rumgeklickt werden soll (für den Anfang).
Remoteverbindung ist eingeschaltet
TCP/IP sind aktiv
Named Pipe ist nicht vorhanden
Firewall Regeln wurden bereits für: 135; 1433;1434;4022 & 1434 UDP erstellt (eingehend und ausgehend)
Die Firewall ist ausgeschaltet
Der Virenschutz ist ausgeschaltet
Das dotnet-sdk-7.0.400-win-x64 wurde installiert

Erhalte aber immer noch denselben Verbindungsfehler...
Habe eine Winform gebaut um den Connectionstring zu prüfen (Mit der Winforms App funktioniert die Verbindung einwandfrei).

Nice to know
Das UI wurde als MAUI Blazor-App entwickelt, damit die Applikation als Desktop Applikation installiert werden kann. Eigentlich sollte die Applikation meiner Meinung nach unabhängig von der Webassembly und den Zugriff auf die Datenbank genutzt werden können.

Wer Rechtschreibfehler findet, darf sie behalten.

Ist in der Config irgendwo ein Typo?

Setz den SQL Server nochmal frisch auf - kost ja nix beim SQL Express 😃.

Geh Schritt für Schritt alles durch.

<Offtopic>
Und kleiner Tip am Rande: Nach der Installation vom SQL Server bekommst du einen kleinen schmalen Hinweis auf ein Config-File. Sichere dir die Dinger weg. Dann kannst du die SQL Installation über diese Config Files laufen lassen. - >das mal as OT
</Offtopic>

In der Config ist kein Typo enthalten und den SQL-Server kann ich auch nicht ohne weiteres neu aufsetzen, da dieser noch von einem anderen Tool verwendet wird. Ggf. werde ich aber eine eigene Instanz installieren und meine Versuche noch einmal ausführen & mir das mit dem Config-File merken/umsetzen.

Ich habe ein kleines Projekt erstellt, welches meinen Umstand verdeutlicht. Bei Interesse könnt Ihr Euch dies einmal ansehen, kompilieren und auf einem anderen Server installieren.
Ggf. könnt Ihr etwas erkennen, was mir nicht aufgefallen ist oder gänzlich unbekannt ist.

Zur Verdeutlichung:
- Das UI Projekt ist in MAUI Blazor implementiert und stellt die grafische Oberfläche
- Das Entity Projekt ist selbsterklärend und als Klassenbibliothek erstellt
- Das Server-Side Projekt ist als Blazor Server App implementiert, um darüber die EF Migrationen durchführen zu können

Wer Rechtschreibfehler findet, darf sie behalten.

Nicht demotivierend, sondern weil Du nach Feedback gefragt hast:
so sieht halt ein unstrukturiertes Projekt aus, wo erstmal losgelegt wurde statt sich vorher nen Plan zu machen 😃

  • Projekt hat keine Struktur und trennt keine Verantwortlichkeiten; es fehlt völlig der Ansatz von wieder-verwendbarem Code.
  • Deine Entitäten sind gleichzeitig Business-Modell und UI-Modell, viel Spaghetti-Code
  • Die Datenschicht (Verantwortlichkeit) fehlt komplett
  • Die Verwendung von asynchronen Methoden ist teilweise abenteuerlich / haben versteckte Fehler, die Du niemals per Debugging finden wirst (zB Race Conditions mit Wait() und Co).
  • Das Exception-Handling widerspricht jeglichen Empfehlungen / Guides (Exception Handling (C# Programming Guide))

Ob das alles für Dich relevant ist, musst selbst einordnen. Das sind nur reine Feststellungen, die ich in nem 5 Min Zeitslot bei einer groben Durchsicht gefunden hab.

Zum ConnectionString: warum das ganze gepuzzle mit der Custom Deserialization per Json? Sieht so aus, dass Du das AppSettings-System von .NET nicht im Ansatz verstanden hast. 
Nimm doch einfach die builder.Configuration Property - da steckt alles drin. Kannst in jedem absoluten Basic Tutorial von MAUI nachlesen. Erster Google Treffer: App Configuration Settings in .NET MAUI (appsettings.json)

Bei dem Config-Code muss ich leider nachfragen: jemals den Debugger benutzt, ob in Deinem Konstrukt überhaupt die richtigen Werte geladen werden, oder vesuchst dauernd zB auf nen Empty-String zu connecten?


Die Idee, dass Du via MAUI direkt auf die DB zugreifst: bleib nicht so gut.
So hättest Du schon nicht beginnen sollen. Das kannst auch nicht so einfach "später" migrieren, weil Dein gesamter Code auf Deiner DB Struktur aufbaut, weil halt die Trennung von Verantwortlichkeiten fehlt.
Resultat daraus ist: soll Deine App auf eine API zugreifen, was der richtige Weg wäre, musst im Endeffekt 95% Deines Codes neu schreiben (wobei es im Summe halt auch nur eine super kleine Code-Base ist, eher ein Mini-Tool).

Hallo Abt

Nicht dass ich etwas gegen konstruktive Kritik einzuwenden hätte, nur bei einem Beispielprojekt will ich keinen Blumentopf mit der Architektur gewinnen.
Trotzdem vielen Dank das Du Dich auf das Abenteuer eingelassen hast.

Zum Connection String:
Mit dem ganzen gepuzzle, konnte ich den Connection String auslesen und somit war dies kein Leerstring in der Registrierungsklasse. War er denn bei Dir immer leer? Hast Du es für Dich fixen und woanders lauffähig installieren können?

Direkt auf Maui zugreifen:
Da es mein erstes Maui Projekt ist, ist der Weg auch für mich noch etwas holprig. Aber die Migration nach Rest wird nicht schwer sein, es wird eine reine Fleißarbeit werden.
Und da ich noch nicht allzu viel aus der DB konsumiere, wird sich auch hier der Aufwand in überschaubaren Grenzen halten.

Reine Verständnisfrage:
Wenn ich eine Maui Blazor App erstelle, diese in eine msix Datei packe und dann woanders (Windows) installiere, handelt es sich dann dabei um eine Desktopapp?

Cheers

Wer Rechtschreibfehler findet, darf sie behalten.