none
Timeout bei Verbindung RRS feed

  • Frage

  • Hallo Zusammen,

    ich habe einen Rechner mit Windows Server 2012, auf dem wiederum 2 Virtuelle Server 2012 laufen.
    Einen Web- und einen Datenbankserver. Ich kann vom Web den Datenbankserver anpingen.
    Wenn ich aber über die Website (c# und Dotnetframework 4.5) versuche, Daten aus dem Datenbankserver auszulesen bekomme ich die Meldung:

    Verbindungstimeout abgelaufen. Das Timeout ist aufgetreten, während die Bestätigung des Handshakes vor der Anmeldung verarbeitet wurde. Möglicherweise ist ein Fehler beim Handshake vor der Anmeldung aufgetreten, oder der Server hat nicht rechtzeitig geantwortet.  Folgende Verbindungszeiten wurden bei dem Versuch benötigt, eine Verbindung mit diesem Server herzustellen: [Vor Anmeldung] Initialisierung=21434; Handshake=6;         

    In der Web.config nutze ich folgenden Eintrag:

    connectionString="Server=Meinserver; Database=MeineDatabase; User Id=user;Password=Pw;"

    Was mache ich da falsch?

    Gruß
    Markus


    Montag, 20. Juli 2015 14:03

Antworten

  • Hi Markus,
    seit einigen Wochen habe ich Probleme bei der Nutzung virtueller Switches, Hyper-V und aktiviertem IPv6. Nach relativer kurzer Zeit funktioniert manchmal die Namensauflösung im Host nicht mehr, wenn in einer VM ein DC aktiv ist. Nach einem "ipconfig /renew" auf dem Host funktioniert die Namensauflösung wieder einige Zeit. Die Ursachen dafür habe ich aus Zeitgründen noch nicht ermitteln können. Genau so ist es mit bisher nicht gelungen, in den unterschiedlichen Subnetzen den Zugriff auf das Internet über IPv6 zu gewährleisten (analog NAT in IPv4). Also eine Menge ungelöster Probleme bei mir, weshalb ich explizit auch nach IPv6 gefragt habe.

    Ich vermute, dass Microsoft mit IPv6 noch Probleme bei einer sauberen Implementierung hat und z.Z. über Updates an Veränderungen bastelt.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks


    Mittwoch, 22. Juli 2015 12:50

Alle Antworten

  • Hi Markus,
    das Ping reicht nicht aus. Der Datenbankserver muss auch erreichbar sein. Dazu ist des Konto, mit dem zugegriffen werden soll, im SQL Server zu berechtigen. Für den Fall der Webanwendung ist das üblicherweise im Webserver das Pool-Konto, in welchem die Webanwendung ausgeführt wird. Außerdem muss im SQL Server die Firewall freigeschalten sein. 

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 20. Juli 2015 14:32
  • Hey Peter, danke schon mal. Ich hab jetzt als User den sa genommen, der solle ja Zugriff haben. Firewall kurzzeitig komplett ausgeschaltet, klappt immer noch nicht...
    Muss mal in Ruhe drüber schlafen und dann melde ich mich noch mal ;-)

    Gruß
    Markus

    Montag, 20. Juli 2015 15:14
  • Hallo Markus,

    wie Peter Fleischer schon erwähnt, würde ich mal die Firewall prüfen, ob die nicht eine eingehende Verbindung des Datenbankservers blockiert (sollte normalerweise automatisch eine entsprechende Regel eingestellt worden sein).

    Welche Version des SQL-Servers haben Sie denn installiert? Sollten Sie eine SQL-Express-Variante installiert haben, kommt üblicherweise noch der Suffix "SQLEXPRESS" hinten an den Server. In Ihrem Beispiel also:

    "Server=Meinserver\SQLEXPRESS; Database=MeineDatabase; User Id=user;Password=Pw;"

    Sie können auch schauen, wie die Instanz genau heißt in dem Sie unter den Diensten des Datenbankservers nach folgendem Eintrag schauen:

    Der Name in der Klammer zeigt den Namen der Instanz.

    Montag, 20. Juli 2015 15:20
  • Hi Markus,
    je nach Version hat der Nutzer "sa" u.U. keinen Zugriff. Besser ist es, einen konkreten Nutzer anzulegen, sicherzustellen, dass der Zugriff funktioniert und diesen dann im Programm zu nutzen. Am sichersten ist es, beide Rechner in die Domäne einzubinden und mit Domänenkonto zu arbeiten.

    Um schnell zu prüfen, ob der Zugriff funktioniert, kann man eine Datei auf dem Desktop anlegen, die die Endung "udl" hat, z.B. "testSQL.udl". Nach dem Doppelklick auf das Icon wird das Fenster "Datenverknüpfungseigenschaften" geöffnet und man kann nach der Eingabe der Parameter mit "Verbindung testen" überprüfen, ob ein Zugriff mit den eingegeben Parametern möglich ist.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 20. Juli 2015 15:44
  • Hallo Markus,

    das der angegebene Servername falsch ist oder die Firewall den Zugriff blockiert, kann man fast ausschließen, dann würdest Du den generischen Fehler "error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden" erhalten. Dass der verwendete Login keine Berechtigungen hat, kann man ganz ausschließen, den dann würdest Du sofort eine entsprechende Fehlermeldung erhalten und nicht erst nach einem Timeout.

    Ich würde erst mal einen Blick in die ErrorLog Datei vom SQL Server werfen, ob da was entsprechendes steht, sowie ins Windows EventLog vom Datenbankserver.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 21. Juli 2015 06:32
  • Also wir haben jetzt den SQL-Server 2014 installiert, bis dato hatten wir Windows Server 2003 Web Edition als Webserver und Windows Server 2003 Standard mit SQL-Server 2000. Da war alles irgendwie "einfacher".

    Ich sehe mir gleich mal die Protokolle an und gebe danach Rückmeldung :)

    Gruß
    Markus

    Dienstag, 21. Juli 2015 09:32
  • So, hab nix verdächtiges in den Protokollen gefunden?!?
    Extra nochmal die Firewall kontrolliert, Port explizit freigegeben, trotzdem Timeout.
    Hab mir dann 'ne Website in vb.Net (Framework 1.14 oder so) auf dem alten Webserver geschrieben und bekomme Zugriff und Daten zurück geliefert?!?!

    Noch einer 'ne Idee?

    Gruß
    Markus

    Dienstag, 21. Juli 2015 13:39
  • Hi Markus,
    hast Du es mal mit einer udl  und dem Konto probiert, welches beim Zugriff genutzt wird?

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 21. Juli 2015 14:11
  • Hallo,

    kann es sein, dass Web Server von Firewall blockiert ist, oder auf einem falschen Netzwerk-Interface läuft?


    Grüße

    Dienstag, 21. Juli 2015 14:13
  • Hab mir jetzt eine test.udl angelegt, bekomme nach einiger Zeit auch den DB Server angezeigt, gebe dann Benutzer und PW ein und wenn ich dann auf Datenbank klicke bekomme ich nach einiger Zeit ein Timeout.

    Da stimmt ja schon am ganzen Konstrukt etwas nicht... scheixxxx
    Anpingen kann ich den DB Server

    Unser Aufbau sieht wie folgt aus:

    Hardwareserver 2012R2, HyperV Server, 3 Lankarten (1 x internes Firmennetz, 1 x direkte Anbindung Internet, 1 x Netzwerk Datenbankserver)

    Web Server 2012 R2, virtuell, direkte Verbindung ins Internet über virtuellen Switch 1, Verbindung Datenbank SQL Server 2014 über virtuelles privates Netzwerk

    DB Server 2012 R2, virtuell, direkte Verbindung ins Firmennetz über virtuellen Switch 2, Verbindung Webserver s.o., Verbindung Netzwerk Datenbankserver über virtuellen Switch 3

    Ich hoffe das ist einigermaßen verständlich :)

    Gruß
    Markus


    Dienstag, 21. Juli 2015 14:34
  • Hi Markus,
    wenn Du schon die NIC's aufführst, dann zeige mal die IPv4- und, falls genutzt, auch die IPv6-Adressen aller NIC's im Web- und DB-Server und die Masken (bei IPv4). Wenn Du mit URL's arbeitest, dann zeig mal das Tracert-Protokoll (vom Web Server zur DB Server).

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks


    Dienstag, 21. Juli 2015 16:04
  • So, die IP's sind
    Hauptserver
    Lan1 192.168.40.221 (internes Firmennetz), Subnet 255.255.255.0
    Lan2 192.168.42.101 (direkt Anschluss Gateway mit fester, externer IP), Subnet 255.255.255.0
    Lan3 192.168.11.112 (internes Firmennetz), Subnet 255.255.255.0

    Lan1 und 3 sind als virtuelle Switche mit dem DB-Server verbunden, der wiederum hat die IP's

    Virtueller Switch 1 192.168.40.222 und virtueller Switch 3 mit 192.168.11.115
    Dann noch einen virtuellen Adapter mit der IP 192.168.44.1

    Der Web-Server  hat einen virtuellen Switch mit der IP 192.168.42.110 und einen virtuellen Adapter mit der IP 192.168.44.80
    Darüber erfolgt der direkte zugriff auf den SQL-Server.

    Ich hab jetzt mal im "privaten" virtuellen Netzwerk (zwischen Web- und DB-Server) IPv6 deaktiviert. Danach mal Tracert vom Web zum DB abgerufen und die richtige Meldung (direkter Weg zur DB-Server-IP) bekommen.
    Seit dem klappt der Zugriff auch vom neuen Webserver auf den SQL-Server?!? Einer eine Erklärung?
    Hauptsache es Funktioniert :):)

    Gruß
    Markus

    Mittwoch, 22. Juli 2015 12:24
  • Hi Markus,
    seit einigen Wochen habe ich Probleme bei der Nutzung virtueller Switches, Hyper-V und aktiviertem IPv6. Nach relativer kurzer Zeit funktioniert manchmal die Namensauflösung im Host nicht mehr, wenn in einer VM ein DC aktiv ist. Nach einem "ipconfig /renew" auf dem Host funktioniert die Namensauflösung wieder einige Zeit. Die Ursachen dafür habe ich aus Zeitgründen noch nicht ermitteln können. Genau so ist es mit bisher nicht gelungen, in den unterschiedlichen Subnetzen den Zugriff auf das Internet über IPv6 zu gewährleisten (analog NAT in IPv4). Also eine Menge ungelöster Probleme bei mir, weshalb ich explizit auch nach IPv6 gefragt habe.

    Ich vermute, dass Microsoft mit IPv6 noch Probleme bei einer sauberen Implementierung hat und z.Z. über Updates an Veränderungen bastelt.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks


    Mittwoch, 22. Juli 2015 12:50
  • Ich vermute auch, das IPv6 mein Problem war, hab ja sonst nix geändert ;-)

    Ich hoffe dass das hier auch anderen hilft :)

    Gruß
    Markus

    Mittwoch, 22. Juli 2015 14:32