Ho avuto lo stesso problema con SQL Server 2014 istanza denominata installata localmente. La connessione usando il FQDN\InstanceName
fallirebbe, mentre la connessione usando solo il mio hostname\InstanceName
funzionava. Ad esempio: connettersi usando ha mycomputername\sql2014
funzionato, ma usando mycomputername.mydomain.org\sql2014
no. DNS risolto correttamente, TCP / IP è stato abilitato in Gestione configurazione SQL, aggiunte le regole di Windows Firewall (e quindi disattivato il firewall per i test per assicurarsi che non stesse bloccando nulla), ma nessuno di questi ha risolto il problema.
Alla fine, ho dovuto avviare il servizio " SQL Server Browser " su SQL Server e questo ha risolto il problema di connettività.
Non mi ero mai reso conto che il servizio SQL Server Browser aiutava effettivamente SQL Server a stabilire connessioni; Ho avuto l'impressione che abbia semplicemente aiutato a popolare i menu a discesa quando hai fatto clic su "cerca altri" server a cui collegarti, ma in realtà aiuta ad allineare le richieste dei client con il numero di porta corretto da utilizzare, se il numero di porta non è assegnato in modo esplicito (simile al modo in cui i binding di siti Web aiutano ad alleviare lo stesso problema su un server Web IIS che ospita più siti Web).
Questo elemento di connessione è ciò che mi ha dato l'indizio sul servizio SQL Server Browser: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- nome
- quando si utilizza wstst05 \ sqlexpress come nome del server, il codice client separa il nome della macchina dal nome dell'istanza e wstst05 viene confrontato con il nome netbios. Non vedo alcun problema per loro di abbinare e la connessione è considerata locale. Da lì, recuperiamo le informazioni necessarie SENZA contattare SQL Browser e ci colleghiamo all'istanza SQL tramite memoria condivisa senza alcun problema.
- quando si utilizza wstst05.capatest.local \ sqlexpress, il codice client non confronta il nome (wstst05.capatest.local) con il nome netbios (wstst05) e considera la connessione "remota". Questo è di progettazione e prenderemo sicuramente in considerazione il miglioramento in futuro. Comunque, a causa della considerazione della connessione remota e del fatto che si tratta di un'istanza denominata, il client decide che è necessario utilizzare SQLBrowser per la risoluzione dei nomi. Tenta di contattare il browser SQL su wstst05.capatest.local (porta UDP 1434) e apparentemente quella parte fallisce. Da qui l'errore che si ottiene.
Il motivo del servizio "SQL Server Browser" di TechNet (enfasi aggiunta da me): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx
Dalla sezione "Utilizzo del browser SQL Server":
Se il servizio SQL Server Browser non è in esecuzione, è comunque possibile connettersi a SQL Server se si fornisce il numero di porta corretto o la pipe denominata. Ad esempio, è possibile connettersi all'istanza predefinita di SQL Server con TCP / IP se è in esecuzione sulla porta 1433. Tuttavia, se il servizio SQL Server Browser non è in esecuzione, le seguenti connessioni non funzionano :
- Qualsiasi componente che tenta di connettersi a un'istanza denominata senza specificare completamente tutti i parametri (come la porta TCP / IP o la pipe denominata) .
- Qualsiasi componente che genera o trasmette informazioni server / istanza che potrebbero essere successivamente utilizzate da altri componenti per riconnettersi.
- Connessione a un'istanza denominata senza fornire il numero di porta o la pipe.
- DAC a un'istanza denominata o all'istanza predefinita se non si utilizza la porta TCP / IP 1433.
- Il servizio di redirector OLAP.
- Enumerazione dei server in SQL Server Management Studio, Enterprise Manager o Query Analyzer.
Se si utilizza SQL Server in uno scenario client-server (ad esempio, quando l'applicazione accede a SQL Server attraverso una rete), se si interrompe o si disabilita il servizio SQL Server Browser, è necessario assegnare un numero di porta specifico a ciascuna istanza e scrivere il codice dell'applicazione client per utilizzare sempre quel numero di porta. Questo approccio presenta i seguenti problemi :
- È necessario aggiornare e gestire il codice dell'applicazione client per assicurarsi che si connetta alla porta corretta.
- La porta scelta per ciascuna istanza può essere utilizzata da un altro servizio o applicazione sul server, rendendo l'istanza di SQL Server non disponibile.
E altre informazioni dallo stesso articolo della sezione "Funzionamento del browser SQL Server":
Perché solo un'istanza di SQL Server può utilizzare una porta o una pipe, vengono assegnati numeri di porta e nomi di pipe diversi per le istanze denominate, incluso SQL Server Express. Per impostazione predefinita, quando abilitato, entrambe le istanze denominate e SQL Server Express sono configurate per utilizzare porte dinamiche, ovvero una porta disponibile viene assegnata all'avvio di SQL Server. Se lo si desidera, è possibile assegnare una porta specifica a un'istanza di SQL Server. Durante la connessione, i client possono specificare una porta specifica; ma se la porta viene assegnata in modo dinamico, il numero di porta può cambiare ogni volta che si riavvia SQL Server, quindi il numero di porta corretto è sconosciuto al client. ... Quando i client SQL Server richiedono risorse SQL Server, la libreria di rete client invia un messaggio UDP al server utilizzando la porta 1434. SQL Server Browser risponde con la porta TCP / IP o la pipe denominata dell'istanza richiesta.