Не удается подключиться к SQL Server, если не указан порт по умолчанию

#c# #sql #.net #sql-server #sql-server-2016

Вопрос:

Я столкнулся со странной ситуацией при подключении к экземпляру SQL Server. Экземпляр запущен и прослушивает порт 1433, однако я не могу подключиться, если не укажу порт по умолчанию 1433 в строке подключения.

Не работает:

 <add name="DataContext" connectionString="Data Source=192.168.150.1sqlinstance;Initial Catalog=DATABASE;Persist Security Info=True;User ID=dbUser;Password=dbPass;MultipleActiveResultSets=True; Asynchronous Processing=true;Max Pool Size=700" providerName="System.Data.SqlClient" />
 

Действительно Работает:

 <add name="DataContext" connectionString="Data Source=192.168.150.1sqlinstance,1433;Initial Catalog=DATABASE;Persist Security Info=True;User ID=dbUser;Password=dbPass;MultipleActiveResultSets=True; Asynchronous Processing=true;Max Pool Size=700" providerName="System.Data.SqlClient" />
 

Это началось совсем недавно и влияет только на нашу среду тестирования. Наша производственная среда настроена идентично, за исключением IP-адреса, и она от этого не страдает. Это не так уж и важно, просто добавить порт в строку подключения, но я хотел бы выяснить, как это произошло. Я также должен упомянуть, что у меня нет проблем с использованием среды Management Studio или просто с помощью telnet, чтобы убедиться, что порт открыт. Я думаю, что это может быть проблема C# или .net, а не проблема конфигурации SQL Server.

Комментарии:

1. RE: «… может быть проблема с C# или .net…» .net довольно узко мыслит о таких вещах, как полностью объявленные строки подключения. Я проверил наши строки подключения SSIS, и порт явно объявлен. (У меня уже была открытая среда), поэтому я не могу подтвердить поведение, которое вы видите. Но c# / .net кажется идеальной причиной. Возможно, вам захочется предвидеть сбой в производстве просто на всякий случай.

2. Для подключения к именованным экземплярам без указания порта требуется служба браузера SQL Server-она должна быть запущена, а порт 1434, который она использует, должен быть открыт для UDP-трафика (на сервере). Это верно, даже если именованный экземпляр запущен на порту по умолчанию, поскольку код подключения не может этого предположить. Обратите внимание, что если вы укажете порт, имя будет проигнорировано-так что 192.168.150.1,1433 будет работать так же хорошо. Следовательно, сервер, не имеющий именованного экземпляра, также может быть возможной причиной. Вероятность того, что это проблема с кодом (как в фреймворке), ничтожно мала.

Ответ №1:

установите клиентские протоколы ms sql «общая память» и «именованные каналы» как отключенные, если используется только строка подключения tcp ip без порта по умолчанию

Комментарии:

1. Отключение других опций, похоже, устранило проблему. Теперь я могу нормально подключиться, не указывая порт. Странно, так как они включены в производство, но это не проблема, но я рад, что сейчас все работает нормально.