![]() |
Datenbank: MSSQL • Version: 2012 • Zugriff über: Firedac
MS SQL Server mit alternativen Ports nutzen
Hallo,
Ich nutze MSSQL Server via Firedac. Normalerweise verbindet man sich ja dann über
Code:
Das scheint bei MS SQL Servern die nicht den Standardport nutzen nicht zu klappen.
Servername\Instanzname
Dann verbinde ich mich via:
Code:
Nun ist mir zu Ohren gekommen, dass man auch den "MS SQL Server Browser Dienst" nach den
tcp:Servername\Instanzname,Port
Ports der Instanzen Fragen kann. Scheinbar ist es nämlich sogar möglich, dass eine Instanz keinen fest zugewiesenen Port nutzt. Ich halte das zwar für unpraktikabel wegen der Firewall freigaben, aber was soll's. Was kann ich machen das Firedac den MS SQL Server Browser zurhilfe nimmt um eine Verbindung aufzubauen? Wenn das nicht geht. Wie kann ich diesen MS SQL Server Browser nutzen? Gibt es Delphi Bibliotheken dafür ? Hat es mal jemand gemacht? |
AW: MS SQL Server mit alternativen Ports nutzen
Shameless self bump
|
AW: MS SQL Server mit alternativen Ports nutzen
Hai QuickanDirty,
es ist richtig das nur die Standarndinstanz auf den Standard Port 1433 hört. Wenn Du dich jetzt via TPC/IP mit einer anderen Instanz verbinden möchtest musst Du entweder den Port der Instanz angeben (Das wird über das SQL Server Configuration Manager eingestellt). ODER Du must den SQL-Server Browser aktivieren. Dieser kümmert sich darum das der Client mit der richtigen Instanz kommuniziert. |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
Kann man das in FireDac aktivieren? Kann ich den SQL-Server Browser selbst fragen? |
AW: MS SQL Server mit alternativen Ports nutzen
Irgendwie komme ich noch nicht dahinter, was du vorhast.
Im FireDAC ConnectionEditor kann man auf den Wizard-Button klicken, um sich eine Verbindung zusammenzubauen. Dabei wird für MSSQL der entsprechende ODBC-Dialog von Windows aufgerufen. Soweit ich weiß sucht FireDAC selbst überhaupt nicht nach potentiellen SQL-Servern, sondern erwartet immer einen passenden Connection-String. |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
Zitat:
Folgendes szenario: Auf einem Server beim Kunden laufen 4 instanzen des MSSQL Servers. und eine instanz des SQL-Server-browsers. Ich verwende folgenden string für den Server Parameter in Firedac.
Code:
Der port der Instanz namens "EVALUATION" ist 2222.
SBS2003\EVALUATION
Firedac scheint keine Verbindung mit diesen angaben aufzubauen. Obwohl der SQL-Server-browser aktiv ist. Wenn ich den wert für den Server Parameter ändere in
Code:
verbindet sich Firedac.
tcp:SBS2003\EVALUATION,2222
Angeblich weiß der SQL-Server-Browser das "SBS2003\EVALUATION" auf 2222 lauscht. Angeblich kann man SQL-Server-Browser danach fragen. "hey welchen Port hat die Instanz mit namen EVALUATION". Wie geht das? Ich brauche diese Information für ein Setup Programm. |
AW: MS SQL Server mit alternativen Ports nutzen
Lies mal
![]() |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
Er hat halt fest gestellt was der SQL Server Browser macht. Ich bin jetzt etwas verunsichert wer die Gegenstelle zur kommunikation mit dem SQL Server Browser bildet. Ist es das tool oder der SQLNative client. Wenn es der native client schon automatisch macht, dann müsste weder ich noch Firedac sich darum kümmern. Das ganz versuche ich ja heraus zu bekommen weil,ein Kunde sich aufgeregt hat, dass wir uns den Port nicht einfach über den SQL-Server-Browser besorgen, statt ihn damit zu behelligen den Port selbst rauszufinden und anzugeben. Wenn das also der native client bereits selbst macht, hat der Kunde den SQL-Server-Browser nicht eingeschalet gehabt. Da ich aber nicht hoffe das er so blöd ist, könnte es vielleicht sein das ich den SQL-Server Browser selbst abfragen MUSS? |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
Wenn der Nativeclient installiert ist muss ich den Devarts den Port nicht angeben ansonsten schon. Wie allerdings der MS Nativeclient dies in Erfahrung bringt und wie die Devarts an die Info kommen weiss ich nicht. Was ich weiss ist - Wir können uns nicht darauf verlassen dass der Kunde immer den Native Client on board hat. Insofern muss bei bei uns beim Setup der Port manuell eingegeben werden wenn <> default. |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
|
AW: MS SQL Server mit alternativen Ports nutzen
Moin moin,
deine Frage zu FireDAC speziell kann ich dir nicht beantworten. Wenn du den SQL-Server-Browser aber selbst abfragen musst, dann kannst du per UDP ein Byte ($02) an den Dienst senden und erhälst die Antwort. Hier ein simples Bsp:
Code:
Ab dem 4. Byte steht dann wohl ein reiner String in der Antwort. Was genau die ersten 3 Bytes der Antwort aussagen, kann ich dir nicht sagen. Eine Info/Doku/API dazu habe ich leider nicht finden können - ich hatte das einfach nur mal mit gesnifft.
function RawQueryMSServerBrowser(const PaStrServer: String): String;
var Client: TIdUDPClient; begin Client := TIdUDPClient.Create(nil); try Client.Send(PaStrServer, 1434, #$02); Result := Client.ReceiveString(1000); finally Client.Free; end; end; Eventuell hilfts dir ja weiter... |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
Danke! Wenn es dir anders geht als mir. Du also mit Spezifikationen was anfangen kannst...tata ![]() Da ist sogar dein beispiel drin. und es geht auch als Broadcast. cool. ![]() Das macht quasi den weg frei, dafür dass man dem Admin einfach eine Liste gefundener Instanzen anbietet. |
AW: MS SQL Server mit alternativen Ports nutzen
Danke für die Links. Mit diesen Infos kann man dann die Antwort ja korrekt auswerten. Wie findet ihr nur immer sowas - ich suche vermutlich generell mit den falschen Suchbegriffen ^^
|
AW: MS SQL Server mit alternativen Ports nutzen
ok es bedarf scheinbar eines echten parsers
Die antwort besteht aus folgenden Produktionsregeln. ![]() Außerdem... Wie empfange ich mit einem UDP Client korrect alle Antworten eines Broadcasts? Ich empfange immer nur eine. Damit das funktioniert mache ich einfach gaaanz viele Broadcasts so dass verschiedene Server schneller sind. Das kann doch nicht der weg sein wie man sowas machen muss.
Delphi-Quellcode:
procedure TMSSQLServerBrowserClient.Refresh;
var counter:Cardinal; Client: TIdUDPClient; sreceived:string; begin FSQLServers.clear; Client := TIdUDPClient.Create(nil); try Client.Port := Port; Counter := getTickCount()+ 5000; while getTickCount() < counter do Begin Application.ProcessMessages; Client.Broadcast(CLNT_BCAST_EX,Port); // Client.Send(CLNT_UCAST_EX); sReceived := Client.ReceiveString(10000); Parse(sReceived); end;//while getTickCount() < counter do finally Client.Free; end; End; |
AW: MS SQL Server mit alternativen Ports nutzen
Eine Lösung für ActiveMQ Server habe ich neulich hier gepostet:
![]() Eventuell hilft der Code weiter, leider habe ich kein MS SQL installiert |
AW: MS SQL Server mit alternativen Ports nutzen
Moin moin,
Zitat:
|
AW: MS SQL Server mit alternativen Ports nutzen
Habe ich versucht!
Der Port 1434 ist belegt....von meinem eigenen SQL-Serverbrowser. |
AW: MS SQL Server mit alternativen Ports nutzen
Also es fehlt mir wirklich, wie man vernünftig die anworten auf einen UDP Broadcast empfängt! Wenn es mehr als eine ist....
Hat einer ne Ahnung? Spammen funktioniert zwar, aber das kann es doch nicht sein. |
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
|
AW: MS SQL Server mit alternativen Ports nutzen
Zitat:
|
AW: MS SQL Server mit alternativen Ports nutzen
@mjustin:
Delphi-Quellcode:
Ich habe hier ja einen SQLServer browser am laufen. wie verhindere ich diese meldung?
MCastClient:= TIdIpMCastClient.create(nil);
MCastClient.DefaultPort := Port; //Port= 1434 MCastClient.OnIPMCastRead := onIPMCastRead; MCastClient.ReuseSocket := rsTrue; MCastClient.ThreadedEvent := True; MCastClient.Active := True;//hier kommt es zu einer exception could not bind socket, port already in use. (RSCouldNotBindSocket) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz