none
SQL Browser Dienst meldet nur eine Instanz zurück RRS feed

  • Frage

  • Moin,

    ich habe in VB6 eine Klasse, die mir die erreichbaren SQL-Server-Instanzen im Netzwerk liefern soll (s.u.).
    Nun habe ich leider zwei Server, auf denen mir nur eine 32bit-Instanz angezeigt wird und die gesuchte 64bit-Instanz des SQL Server 2008 R2 nicht.

    Die gesuchte Instanz ist nicht auf "versteckt" gesetzt.
    Hat hierzu jemand eine Idee, woran das liegen könnte?

    VG
    Reiner

    hier der Code von clsSQLBrowse:

    Option Explicit
    ' Klasse erstellt von Reiner Wolff
    ' erstellt am: 20.02.2014

    'bekannte Einschränkung:
    ' findet ausschließlich benannte Instanzen
    ' Standardinstanzen werden nicht aufgelistet
    '
    ' SQL-Browser-Dienst muss auf dem Zielrechner gestartet sein
    ' und Port 1434 für den Dienst muss in den Firewalls freigegeben sein

    Private WithEvents objWinSock As MSWinsockLib.Winsock
    Private RequestString As String
    Private ServerName As String
    Private ServerInstanz As String
    Private tmpServerList As String
    Private PauseAbbrechen As Boolean

    Public RequestHost As String
    'Zeit in Sekunden wie lange auf eine Antwort des Browser-Dienstes gewartet werden soll
    'Standard = 1 Sekunde, muss > 0 sein, da ansonsten keine Antworten eintreffen würden
    Public WaitingTime As Long
    'Liste als Variant deklarieren, damit ein Array zurückgegeben werden kann
    Public SQLServerList As Variant

    Public Event SQLServerFound(ServerName As String, Instanzname As String, ByRef Cancel As Boolean)

    Private Sub Class_Initialize()
        '   Winsock anlegen
        Set objWinSock = frmWinSock.Winsock
        'Standard auf Broadcast stellen
        RequestHost = "255.255.255.255"
        'Zeichenfolge für die Abfrage des BrowserDienstes setzen
        RequestString = Chr$(&H2) & Chr$(&H0)
        WaitingTime = 1
    End Sub

    'geändert am:
    '       01.12.2014  -   W&W -   Fehlerabfangroutine eingebaut, damit bei nicht erreichbarem Host die Zeile mit 'SendData' nicht direkt einen Fehler auslöst (zB beim Netzwerk Außerhaus)
    Friend Sub Connect()
        
        On Error GoTo Fehler
        
        '   Winsock mit Daten füttern
        With objWinSock
            .RemoteHost = RequestHost
            .RemotePort = 1434
            .Protocol = sckUDPProtocol
            .SendData RequestString
        End With
        PauseAbbrechen = False
        Pause WaitingTime
    Rückgabe:
        SQLServerList = Split(tmpServerList, ";")
            If (objWinSock.State <> StateConstants.sckClosed) Then
                '   Nein, unbedingt schließen
                objWinSock.Close
                
                '   nachfolgender Befehl ist wichtig!
                DoEvents
            End If
        Exit Sub
        
    Fehler:
        Select Case Err.Number
        Case 10014  'ungültiges Argument
            'wenn der RequestHost nicht aufgelöst werden kann, tritt dieser Fehler auf.
            'd.h. auch, dass der SQL-Server im Netz nicht erreichbar ist
            GoTo Rückgabe
        Case Else
            Err.Raise Err.Number, Err.Source & ". Connect", Err.Description
        End Select
    End Sub

    Private Sub Class_Terminate()
        '   Wurde ein Winsock-Control angelegt?
        If Not (objWinSock Is Nothing) Then
            '   Ja, ist die Verbindung nicht geschlossen?
            If (objWinSock.State <> StateConstants.sckClosed) Then
                '   Nein, unbedingt schließen
                objWinSock.Close
                
                '   nachfolgender Befehl ist wichtig!
                DoEvents
            End If
            
            '   Winsock entfernen
            Set objWinSock = Nothing
            Unload frmWinSock
        End If
    End Sub

    'Private Sub objWinSock_ConnectionRequest(ByVal requestID As Long)
    ''Hinweis zu Fehler 'Invalid  operation at current state'
    '    If objWinSock.State <> sckClosed Then objWinSock.Close 'closes connection if one is already open
    '    objWinSock.Accept requestID 'allows new connection
    'End Sub

    Private Sub objWinSock_DataArrival(ByVal bytesTotal As Long)
        Dim MSG As String
        Dim Cancel As Boolean
        
        Cancel = False
        ' Received message from server
        objWinSock.GetData MSG, vbString
        
        If MSG Like "*" Then ' Received message from server
            ServerName = Split(MSG, ";")(1)
            ServerInstanz = Split(MSG, ";")(3)
            tmpServerList = tmpServerList & ServerName & "\" & ServerInstanz & ";"
            
            RaiseEvent SQLServerFound(ServerName, ServerInstanz, Cancel)
            PauseAbbrechen = Cancel
        End If
    End Sub

    ' Hilfsfunktionen
    Private Function TimeStamp(Optional ByVal Seconds As Double) As Double
        TimeStamp = Int(Now) + (Timer + Seconds) / 86400
    End Function

    Private Sub Pause(ByVal Seconds As Double)
    Dim t As Double
        t = TimeStamp(Seconds)
        Do Until TimeStamp >= t Or PauseAbbrechen = True
            DoEvents
        Loop
    End Sub

    Donnerstag, 4. Dezember 2014 12:32

Antworten

  • Am 07.12.2014 schrieb Reiner Wolff:

    Am 06.12.2014 schrieb Reiner Wolff:

    D.h. es gibt Server, mit mind. einer 32- und einer 64-Bit Instanz, die
    Du mit deiner Klasse siehst?

    Das weiß ich nicht, da ich bislang keinen anderen Server dieser Konstellation gefunden habe.

    Das solltest Du evtl. testen. Ist Aufwand, aber lässt sich mit Hilfe
    der Testversionen sicherlich darstellen.

    Ja, so einen Test könnte ich bauen, aber gibt es nicht eine einfache Möglichkeit herauszufinden, was der SQL Browser Dienst eigentlich zurückliefert?

    Weiß ich nicht. Ich könnte mir nur vorstellen, dass VB6 mit 64-Bit ein
    Problem hat. Deshalb ja auch die Frage nach .Net, wenn es dort
    funktioniert und im SSMS, solltest Du den Schuldigen gefunden haben.

    Ich hätte gedacht, ich könnte das über Telnet oder dergl. probieren, wüsste aber nicht, was genau ich da eingeben muss..

    Der SQL Browser muss über 1434 TCP und 1434 UDP sprechen können.

    Mit dem SQL Server
    Management Studio siehst Du alle 32- und 64-Bit Instanzen?

    Ja, mit dem SSMS sehe ich beide Instanzen.

    Es ist sicher das das hier nicht zutrifft?

    | 'bekannte Einschränkung:
    | ' findet ausschließlich benannte Instanzen
    | ' Standardinstanzen werden nicht aufgelistet

    Es handelt sich bei beiden Installationen und benannte Instanzen.
    Von daher ist das Sichergestellt. Ich kenne diese Einschränkung allerdings nicht. Hast Du dazu mal einen Link?

    Ich auch nicht, las es nur in deinem Code. Deshalb nochmal die
    Nachfrage.

        BTW: Schreibst Du hier mit einem Newsreader oder über den Browser?


    Ich habe irgendwann aufgegeben 40Tude an diese Foren anzupassen und komme leider nicht mehr regelmäßig dazu, in den Foren mitzulesen (die wachsende Familie hat da einfach Vorrang). Von daher bemühe ich mich mit den Browsermöglichkeiten klar zu kommen.
    Gibt es an der Newsreader-Front für die Forenintegration etwas Neues in den letzten 1,5 Jahren? Denn schön, ist die Browser-Geschichte nicht.

    Mit Hilfe der NNTP-Bridge von Jochen geht das recht gut. In der Bridge
    in den Tools > Advanced Options ein paar kleine Einstellungen
    vornehmen, schon funktioniert das einwandfrei.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Sonntag, 7. Dezember 2014 10:07
  • oder ich eine andere Möglichkeit habe, mir die Rückgaben des SQL-Browsers anzuschauen?

    Hallo Reiner,

    das ist interessant, das ist das erste Mal das ich sehe, das sich jemand die Mühe gemacht hat, den ganzen UDP Broadcast selbst aus zu programmieren.

    Alle anderen verwenden das lieber SQL-DMO => ListAvailableSQLServers Method, das sind nur 2 Codezeilen. Hast Du es damit mal versucht? Kannst Du die Instanz im SSMS Login Dialog sehen, wenn Du dort danach suchen lässt?


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Sonntag, 7. Dezember 2014 13:24

Alle Antworten

  • Hallo Reiner,

    Gibt es eine Besserung, wenn Du SysWOW64 ausführst und konfigurierst?
    Datenquellennamen und 64-Bit-Betriebssysteme
    Can't Connect to SQL server 2005 installed on windows 7 X64

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.


    Freitag, 5. Dezember 2014 11:58
    Administrator
  • Moin Dietmar,

    vielen Dank für Deine Idee.
    Das Problem in dem zwei Jahre alten Thread könnte sein, dass er nichts davon geschrieben hat, dass er auch den SQL Browser-Dienst in der Firewall freigegeben hat.

    Aber, da ich nicht über den ODBC-Verbindungsmanager eine Verbindung versuche aufzubauen, sondern das Problem ist, dass ich vom SQL Browser anscheinend nicht alle Instanzen zurückgemeldet bekomme, wüsste ich jetzt nicht, wo ich was Deiner Meinung nach konfigurieren soll.

    Nur zur Klarstellung:
    Verbindungsprobleme zum SQL-Server bestehen nicht!
    Ich kann mich problemlos mit den allen Clients verbinden.

    Ich nutze die SQL-Browser-Info lediglich um herauszufinden, ob ich am Netzwerk bin oder der Laptop sich gerade außerhalb der Domäne an eine Internetleistung geklemmt hat. Dabei stellte sich heraus, dass bei zwei Außenstellen das vorhandensein einer SQL-Server-Instanz mir vom Browser-Dienst (oder meiner Programmierung) nicht richtig zurückgemeldet wird.

    Daher meine Frage bzgl. des Browser-Dienstes, ob dieses Problem bekannt ist oder ich eine andere Möglichkeit habe, mir die Rückgaben des SQL-Browsers anzuschauen?

    Wenn das Problem in meiner Programmierung liegt, wäre ich hier im falschen Forum und stelle die Frage dann nochmal von der Programmiererseite her.

    Gruß
    Reiner

    Freitag, 5. Dezember 2014 18:24
  • Am 04.12.2014 schrieb Reiner Wolff:

    ich habe in VB6 eine Klasse, die mir die erreichbaren SQL-Server-Instanzen im Netzwerk liefern soll (s.u.).
    Nun habe ich leider zwei Server, auf denen mir nur eine 32bit-Instanz angezeigt wird und die gesuchte 64bit-Instanz des SQL Server 2008 R2 nicht.

    D.h. es gibt Server, mit mind. einer 32- und einer 64-Bit Instanz, die
    Du mit deiner Klasse siehst?

    Mit VB.Net das zu versuchen ist keine Alternative? Mit dem SQL Server
    Management Studio siehst Du alle 32- und 64-Bit Instanzen?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Samstag, 6. Dezember 2014 11:25
  • Moin Winfried,

    > D.h. es gibt Server, mit mind. einer 32- und einer 64-Bit Instanz, die
    > Du mit deiner Klasse siehst?

    Das weiß ich nicht, da ich bislang keinen anderen Server dieser Konstellation gefunden habe.

    > Mit VB.Net das zu versuchen ist keine Alternative?

    Nein, oder kann ich VB.Net effizient in Excel-VBA einbinden?
    Zudem würde das meine Frage nicht klären ;-)

    > Mit dem SQL Server
    > Management Studio siehst Du alle 32- und 64-Bit Instanzen?

    Ja, mit dem SSMS sehe ich beide Instanzen.

    Gruß
    Reiner


    Samstag, 6. Dezember 2014 14:18
  • Am 06.12.2014 schrieb Reiner Wolff:

    D.h. es gibt Server, mit mind. einer 32- und einer 64-Bit Instanz, die
    Du mit deiner Klasse siehst?

    Das weiß ich nicht, da ich bislang keinen anderen Server dieser Konstellation gefunden habe.

    Das solltest Du evtl. testen. Ist Aufwand, aber lässt sich mit Hilfe
    der Testversionen sicherlich darstellen.

    Mit VB.Net das zu versuchen ist keine Alternative?

    Nein, oder kann ich VB.Net effizient in Excel-VBA einbinden?

    Hmm, kommt drauf an wie Du das einbinden möchtest.

    Zudem würde das meine Frage nicht klären ;-)

    Wenn es mit .Net funktioniert, könnte man als Ursache das VB6
    ausmachen.

    Mit dem SQL Server
    Management Studio siehst Du alle 32- und 64-Bit Instanzen?

    Ja, mit dem SSMS sehe ich beide Instanzen.

    Es ist sicher das das hier nicht zutrifft?

    | 'bekannte Einschränkung:
    | ' findet ausschließlich benannte Instanzen
    | ' Standardinstanzen werden nicht aufgelistet

    BTW: Schreibst Du hier mit einem Newsreader oder über den Browser?


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Samstag, 6. Dezember 2014 16:06
  • Am 06.12.2014 schrieb Reiner Wolff:

    D.h. es gibt Server, mit mind. einer 32- und einer 64-Bit Instanz, die
    Du mit deiner Klasse siehst?

    Das weiß ich nicht, da ich bislang keinen anderen Server dieser Konstellation gefunden habe.

    Das solltest Du evtl. testen. Ist Aufwand, aber lässt sich mit Hilfe
    der Testversionen sicherlich darstellen.

    Ja, so einen Test könnte ich bauen, aber gibt es nicht eine einfache Möglichkeit herauszufinden, was der SQL Browser Dienst eigentlich zurückliefert?
    Ich hätte gedacht, ich könnte das über Telnet oder dergl. probieren, wüsste aber nicht, was genau ich da eingeben muss..

    Mit dem SQL Server
    Management Studio siehst Du alle 32- und 64-Bit Instanzen?

    Ja, mit dem SSMS sehe ich beide Instanzen.

    Es ist sicher das das hier nicht zutrifft?

    | 'bekannte Einschränkung:
    | ' findet ausschließlich benannte Instanzen
    | ' Standardinstanzen werden nicht aufgelistet

    Es handelt sich bei beiden Installationen und benannte Instanzen.
    Von daher ist das Sichergestellt. Ich kenne diese Einschränkung allerdings nicht. Hast Du dazu mal einen Link?

        BTW: Schreibst Du hier mit einem Newsreader oder über den Browser?

    Ich habe irgendwann aufgegeben 40Tude an diese Foren anzupassen und komme leider nicht mehr regelmäßig dazu, in den Foren mitzulesen (die wachsende Familie hat da einfach Vorrang). Von daher bemühe ich mich mit den Browsermöglichkeiten klar zu kommen.
    Gibt es an der Newsreader-Front für die Forenintegration etwas Neues in den letzten 1,5 Jahren? Denn schön, ist die Browser-Geschichte nicht.

    VG
    Reiner

    Sonntag, 7. Dezember 2014 09:32
  • Am 07.12.2014 schrieb Reiner Wolff:

    Am 06.12.2014 schrieb Reiner Wolff:

    D.h. es gibt Server, mit mind. einer 32- und einer 64-Bit Instanz, die
    Du mit deiner Klasse siehst?

    Das weiß ich nicht, da ich bislang keinen anderen Server dieser Konstellation gefunden habe.

    Das solltest Du evtl. testen. Ist Aufwand, aber lässt sich mit Hilfe
    der Testversionen sicherlich darstellen.

    Ja, so einen Test könnte ich bauen, aber gibt es nicht eine einfache Möglichkeit herauszufinden, was der SQL Browser Dienst eigentlich zurückliefert?

    Weiß ich nicht. Ich könnte mir nur vorstellen, dass VB6 mit 64-Bit ein
    Problem hat. Deshalb ja auch die Frage nach .Net, wenn es dort
    funktioniert und im SSMS, solltest Du den Schuldigen gefunden haben.

    Ich hätte gedacht, ich könnte das über Telnet oder dergl. probieren, wüsste aber nicht, was genau ich da eingeben muss..

    Der SQL Browser muss über 1434 TCP und 1434 UDP sprechen können.

    Mit dem SQL Server
    Management Studio siehst Du alle 32- und 64-Bit Instanzen?

    Ja, mit dem SSMS sehe ich beide Instanzen.

    Es ist sicher das das hier nicht zutrifft?

    | 'bekannte Einschränkung:
    | ' findet ausschließlich benannte Instanzen
    | ' Standardinstanzen werden nicht aufgelistet

    Es handelt sich bei beiden Installationen und benannte Instanzen.
    Von daher ist das Sichergestellt. Ich kenne diese Einschränkung allerdings nicht. Hast Du dazu mal einen Link?

    Ich auch nicht, las es nur in deinem Code. Deshalb nochmal die
    Nachfrage.

        BTW: Schreibst Du hier mit einem Newsreader oder über den Browser?


    Ich habe irgendwann aufgegeben 40Tude an diese Foren anzupassen und komme leider nicht mehr regelmäßig dazu, in den Foren mitzulesen (die wachsende Familie hat da einfach Vorrang). Von daher bemühe ich mich mit den Browsermöglichkeiten klar zu kommen.
    Gibt es an der Newsreader-Front für die Forenintegration etwas Neues in den letzten 1,5 Jahren? Denn schön, ist die Browser-Geschichte nicht.

    Mit Hilfe der NNTP-Bridge von Jochen geht das recht gut. In der Bridge
    in den Tools > Advanced Options ein paar kleine Einstellungen
    vornehmen, schon funktioniert das einwandfrei.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Sonntag, 7. Dezember 2014 10:07
  • oder ich eine andere Möglichkeit habe, mir die Rückgaben des SQL-Browsers anzuschauen?

    Hallo Reiner,

    das ist interessant, das ist das erste Mal das ich sehe, das sich jemand die Mühe gemacht hat, den ganzen UDP Broadcast selbst aus zu programmieren.

    Alle anderen verwenden das lieber SQL-DMO => ListAvailableSQLServers Method, das sind nur 2 Codezeilen. Hast Du es damit mal versucht? Kannst Du die Instanz im SSMS Login Dialog sehen, wenn Du dort danach suchen lässt?


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Sonntag, 7. Dezember 2014 13:24
  • Hallo Reiner,

    Ich gehe davon aus, dass Olafs und Winfrieds Antworten Dir weitergeholfen haben. Solltest Du noch Rückfragen dazu haben, gib bitte Bescheid.

    Grüße,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Mittwoch, 17. Dezember 2014 15:33
    Administrator