2 Stimmen

Zugriff auf SQL Server über ein Netzwerk von einem Windows-Dienst aus

Ich habe eine Klasse erstellt, die eine Verbindung zu SQL Server herstellt, um eine gespeicherte Prozedur auszuführen. Wenn diese Klasse in einer Windows Forms-Lösung verwendet wird, kann erfolgreich auf die Datenbank zugegriffen werden. Wenn die Klasse in einem Windows-Dienst eingesetzt wird, erhalte ich den folgenden Fehler:

Eine netzbezogene oder inst Fehler ist beim Aufbau einer Verbindung zu SQL Server aufgetreten. Der Server wurde nicht gefunden oder war nicht erreichbar. Überprüfen Sie, ob der Instanzname korrekt ist und dass so konfiguriert ist, dass er Remote Verbindungen erlaubt. (Anbieter: [ ] Interfaces, Fehler: 26 - Fehler beim Auffinden des Server/Instanz angegeben)

Ich vermute, dass das Problem mit den Berechtigungen zusammenhängt.

Dies ist der relevante Abschnitt des Codes:

SqlConnection conn = new SqlConnection(j.ConnectionString);
SqlCommand cmd = new SqlCommand(j.Query, conn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);

DataSet ds = new DataSet("Table1");

da.Fill(ds, "Table1");    // <----- error occurs here (Windows Service only)

Die SQL Server-Version lautet

Microsoft SQL Server 2008 (SP1) - 10.0.2766.0 (X64)   
Enterprise Edition (64-bit) on Windows NT 5.2 <X64> 
(Build 3790: Service Pack 2)

Die Visual Studio-Version lautet Microsoft Visual C# 2008 Framework-Version ist 3.5 SP1 .

4voto

ewall Punkte 25613

Windows-Dienste können bei Verwendung der Standardanmeldung "LocalService" keine Netzwerkressourcen nutzen. Daher müssen Sie den Dienst unter einem Benutzerkonto laufen lassen, das den Zugriff auf das Netzwerk erlaubt. Hier sind die Möglichkeiten:

1.) Wenn Sie die "NetworkService"-Verbindung verwenden, sollten Sie für die Verbindung zum SQL-Dienst nicht die integrierte Windows-Authentifizierung verwenden, sondern Sie können die SQL-Authentifizierung mit einem Benutzernamen und einem Passwort verwenden. (Technisch gesehen könnten Sie die integrierte Authentifizierung verwenden, wenn Sie dem Domänenkonto des Client-Computers - z. B. CLIENT$ - Berechtigungen für die Datenbank erteilen... aber das wird nicht empfohlen.)

2.) Wenn Sie den Dienst so einstellen, dass er unter einem echten Benutzerkonto Ihrer Wahl läuft, kann die SQL-Verbindung die integrierte Windows-Authentifizierung verwenden, aber Sie müssen diesem Konto Berechtigungen für die Datenbank geben.

1voto

Anon246 Punkte 1781

Dieser Fehler bedeutet nur, dass der Client keine Verbindung zum Server herstellen kann. Dies ist noch vor der Vergabe von Berechtigungen der Fall. Stellen Sie sicher, dass der App-Server eine Verbindung herstellen kann. Versuchen Sie einige Dinge:

1) Führen Sie einen Telnet-Zugang zur Server-IP über Port 1433 (Standardport vorausgesetzt) durch. Wenn dies nicht funktioniert, gibt es einen Router oder eine Firewall, die den Zugriff auf den Server blockiert? 2) Rufen Sie ODBC (Datenquellen) auf dem Anwendungsserver auf, richten Sie einen DNS-Eintrag ein und klicken Sie am Ende auf die Schaltfläche "Test". Damit wird getestet, ob der Client-Treiber mit dem SQL Server kommunizieren kann.

Höchstwahrscheinlich wird Schritt 1 fehlschlagen. Sie würden den gleichen Fehler erhalten, wenn Sie den Servernamen in "BigBird" ändern würden. Es handelt sich um eine allgemeine Fehlermeldung, die besagt: "Sie haben mir gesagt, dass ich mich mit diesem Server verbinden soll, aber kein Server hat auf eine Verbindungsanfrage geantwortet". Dies geschieht, bevor der "Handshake" und die Berechtigungsprüfung zwischen dem Client und dem Server stattfinden.

HTH, Eric

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X