2016-05-19 2 views
0

Ich habe zwei Windows Server 2012-Computer. Sie sind beide Teil einer Domäne, die ich erstellt habe. Einer ist ein Webserver und der andere ist ein Datenbankserver, der SQL Server 2012 hostet. Vom Webserver kann ich eine Verbindung zum DB-Server mit MSSMS herstellen, aber von einer Anwendung, die ich in IIS geschrieben habe, kann ich keine Verbindung herstellen. Ich erhalte den folgenden Fehler:Verbindung zu SQL Server von IIS

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

Ich habe überprüft, dass der SQL Server Remote-Verbindungen ermöglicht.

Ich habe überprüft, dass es das TCP/IP-Protokoll verwendet.

Ich habe versucht, den SQL Server-Computernamen vollständig zu qualifizieren, um name.domain.com einzuschließen.

Ich bin in der Lage, den SQL Server ohne Probleme zu pingen.

Wie bereits erwähnt, kann ich problemlos eine Verbindung von MSSMS herstellen, indem ich sowohl den Computernamen als auch die IP-Adresse verwende.

Ich habe an dieser Stelle auf beiden Rechnern den Windows-Firewall heruntergefahren und habe die Regeln hinzugefügt, die die folgenden Ports geöffnet:

TPC/IP - 135, 1433, 1434, 2382, 2383, 4022

UDP - 1434

Ich öffnete sogar die Ports für den Fall der Öffentlichkeit.

Innerhalb meiner Anwendung habe ich eine statische Klasse, die mir die Verbindungsinformationen gibt. Es sieht wie folgt aus:

static public class _ConnectionData 
{ 
    public static string Source = "192.168.0.33" 
    public static string Catalog = "dbCat"; 
    public static string User = "dbCatUser"; 
    public static string Password = "**********"; 
    public static string ConnectString 
    { 
     get { return "Data Source=" + Source + "; Integrated Security=false; Initial Catalog=" + Catalog + "; User ID=" + User + "; Password=" + Password; } 
    } 
} 

ich mein virtuelles Verzeichnis in IIS durch Verzeichnis unter inetpub \ wwwroot nur das Kopieren der App einrichten und dann in IIS Admin es zu einer Anwendung zu konvertieren.

Ich bin an diesem Punkt ratlos. Gibt es etwas Spezielles, das ich tun muss, um eine Verbindung von einer IIS Hosted App zu erhalten? Muss ich einen Provider als Teil meiner Verbindungszeichenfolge angeben? Gibt es spezielle Berechtigungen in IIS, die festgelegt werden müssen? Mein AppPool ist auf Integriert gesetzt, ist das korrekt?

Ich bin schon kahl, also bin ich mir zu diesem Zeitpunkt nicht sicher, was ich vielleicht ausziehen werde.

+0

Versuchen Sie Ihren genauen Code von außerhalb von IIS - in einer Konsole App - funktioniert das? (Anstelle von SSMS). Wenn dies der Fall ist, können Einschränkungen für die IIS-Sicherheit (z. B. App-Pool-Konto) beim Erreichen der DB-svr bestehen. –

+0

Hallo Pachy, meine erste Anlaufstelle mit der Anwendung wäre "Integrated Security" aus der Zeichenfolge alle zusammen zu nehmen. Wenn Sie eine Kombination aus Benutzername und Passwort übergeben, ist dies nicht erforderlich. Als nächstes, wie Murray sagte (mich kurz schlagend), würde ich versuchen, mich mit einer Konsolen-App oder sogar mit der Powershell-Verbindung zu verbinden, um sicherzustellen, dass die Verbindungszeichenfolge identisch ist. – Pheonyx

+0

Verbinden Sie sich mit der standardmäßigen oder benannten Instanz? Kann ich von der IP-Adresse zum Hostnamen wechseln? –

Antwort

0

Fehler 26 hat zwei Hauptgründe. 1) SQL SERVER (XXX) Dienst wurde nicht gestartet, 2) Verbindungszeichenfolge ist nicht gültig. In Ihrem Szenario kann Grund 1 nicht korrekt sein, da Sie angegeben haben, dass Sie eine Verbindung mit Sql Server mithilfe von SSMS herstellen können. Das einzige, was übrig bleibt, ist der Grund 2. Sie müssen Ihre Verbindungszeichenfolge überprüfen. Um dies zu erreichen bestätigen Sie bitte Ihre Verbindungszeichenfolge mit dem unten stehenden Link:

Here

Auch wenn Sie nicht brauchen, um die Windows-Authentifizierung Modus zu verwenden, müssen Sie nicht die Integrated Security = false

0
angeben

So stellt sich heraus, dass ich erwischt wurde, die falsche Seiten-Direktive (für mich) mit meinen .Net-Seiten zu verwenden. Ich bin es gewohnt, ein src-Attribut und kein codebehind-Attribut zu verwenden. Mit dem src-Attribut ändert sich die CS-Datei bei jeder Änderung der Klasse. Mit dem Codebehind-Attribut .Net sieht in der DLL zuerst (glaube ich).Da meine Verbindungsinformationen direkt in eine statische Klasse geschrieben wurden, die nicht neu kompiliert wurde, hat sie nie irgendwelche Änderungen erfahren. Ich habe Vahids Antwort als korrekt markiert, weil die Verbindungszeichenfolge immer noch falsch war. Ich wusste es einfach nicht.

Ich habe das Problem behoben, indem ich meine Verbindungsinformationen in die Datei web.config verschoben und sie in die statischen Klassenvariablen eingelesen habe, wenn sie null sind.

Ich möchte allen danken, die mir mit diesem Problem geholfen haben. es wird sehr geschätzt.