Miałem ten sam problem z lokalnie nazwaną instancją SQL Server 2014. Połączenie za pomocą FQDN\InstanceName
nie powiedzie się, a połączenie przy użyciu tylko mojego hostname\InstanceName
działało. Na przykład: łączenie przy użyciu mycomputername\sql2014
działało, ale przy użyciu mycomputername.mydomain.org\sql2014
nie. DNS został poprawnie rozwiązany, protokół TCP / IP został włączony w Menedżerze konfiguracji SQL, dodano reguły Zapory systemu Windows (a następnie wyłączono zaporę do testowania, aby upewnić się, że niczego nie blokuje), ale żadna z nich nie rozwiązała problemu.
Wreszcie musiałem uruchomić usługę „ SQL Server Browser ” na SQL Server i to rozwiązało problem z łącznością.
Nigdy nie zdawałem sobie sprawy, że usługa przeglądarki SQL Server faktycznie pomagała SQL Serverowi w nawiązywaniu połączeń; Miałem wrażenie, że po prostu pomógł wypełnić listy rozwijane, kiedy kliknąłeś „Przeglądaj więcej” serwerów, z którymi chcesz się połączyć, ale tak naprawdę pomaga wyrównać żądania klientów z poprawnym numerem portu do użycia, jeśli numer portu nie jest jawnie przypisany (podobne w jaki sposób powiązania witryn pomagają złagodzić ten sam problem na serwerze sieci Web IIS obsługującym wiele witryn).
Ten element połączenia dał mi wskazówkę dotyczącą usługi przeglądarki SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- imię
- gdy używasz wstst05 \ sqlexpress jako nazwy serwera, kod klienta oddziela nazwę komputera od nazwy instancji, a wstst05 jest porównywany z nazwą netbios. Nie widzę dla nich żadnego problemu, a połączenie jest uważane za lokalne. Stamtąd pobieramy potrzebne informacje BEZ kontaktowania się z przeglądarką SQL i bez problemu łączymy się z instancją SQL za pośrednictwem pamięci współużytkowanej.
- gdy używasz wstst05.capatest.local \ sqlexpress, kod klienta nie porównuje nazwy (wstst05.capatest.local) z nazwą netbios (wstst05) i uznaje połączenie za „zdalne”. Jest to zgodne z projektem i na pewno rozważymy ulepszenie tego w przyszłości. W każdym razie, ze względu na rozpatrzenie połączenia zdalnego i fakt, że jest to nazwane wystąpienie, klient decyduje, że musi użyć SQLBrowser do rozpoznawania nazw. Próbuje skontaktować się z przeglądarką SQL na wstst05.capatest.local (port UDP 1434) i najwyraźniej ta część zawiedzie. Stąd otrzymany błąd.
Przyczyna usługi „SQL Server Browser” od TechNet (podkreślenie dodane przeze mnie): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx
Z sekcji „Korzystanie z przeglądarki SQL Server”:
Jeśli usługa przeglądarki SQL Server nie jest uruchomiona, nadal możesz połączyć się z SQL Server, jeśli podasz poprawny numer portu lub nazwany potok. Na przykład możesz połączyć się z domyślnym wystąpieniem programu SQL Server za pomocą protokołu TCP / IP, jeśli jest on uruchomiony na porcie 1433. Jeśli jednak usługa przeglądarki SQL Server nie jest uruchomiona, następujące połączenia nie działają :
- Każdy komponent, który próbuje połączyć się z nazwaną instancją bez pełnego określenia wszystkich parametrów (takich jak port TCP / IP lub nazwany potok) .
- Każdy komponent, który generuje lub przekazuje informacje o serwerze \ instancji, które mogą być później wykorzystane przez inne komponenty do ponownego połączenia.
- Łączenie z nazwaną instancją bez podawania numeru portu lub potoku.
- DAC do instancji nazwanej lub instancji domyślnej, jeśli nie używa portu 1433 protokołu TCP / IP.
- Usługa przekierowania OLAP.
- Wyliczanie serwerów w SQL Server Management Studio, Enterprise Manager lub Query Analyzer.
Jeśli używasz programu SQL Server w scenariuszu klient-serwer (na przykład, gdy twoja aplikacja uzyskuje dostęp do programu SQL Server przez sieć), jeśli zatrzymasz lub wyłączysz usługę przeglądarki SQL Server, musisz przypisać określony numer portu do każdej instancji i napisz kod aplikacji klienta, aby zawsze używał tego numeru portu. Podejście to ma następujące problemy :
- Należy zaktualizować i utrzymywać kod aplikacji klienckiej, aby upewnić się, że łączy się z odpowiednim portem.
- Port wybrany dla każdej instancji może być używany przez inną usługę lub aplikację na serwerze, co powoduje, że instancja SQL Server jest niedostępna.
I więcej informacji z tego samego artykułu z sekcji „Jak działa przeglądarka SQL Server”:
Ponieważ tylko jedna instancja SQL Server może używać portu lub potoku, dla nazwanych wystąpień są przypisywane różne numery portów i nazwy potoków, w tym SQL Server Express. Domyślnie po włączeniu zarówno nazwane instancje, jak i SQL Server Express są skonfigurowane do korzystania z portów dynamicznych, to znaczy, dostępny port jest przydzielany podczas uruchamiania SQL Server. Jeśli chcesz, konkretny port można przypisać do wystąpienia programu SQL Server. Podczas łączenia klienci mogą określić konkretny port; ale jeśli port jest przypisywany dynamicznie, numer portu może ulec zmianie za każdym razem, gdy SQL Server zostanie zrestartowany, więc poprawny numer portu jest nieznany klientowi. ... Gdy klienci SQL Server żądają zasobów SQL Server, biblioteka sieciowa klienta wysyła komunikat UDP do serwera za pomocą portu 1434. Przeglądarka SQL Server odpowiada portem TCP / IP lub nazwanym potokiem żądanej instancji.