Где находится кеш службы браузера SQL Server для разрешения номера порта имени экземпляра? - PullRequest
0 голосов
/ 23 декабря 2018

С здесь :

Когда клиенты SQL Server запрашивают ресурсы SQL Server, сетевая библиотека клиентов отправляет на сервер сообщение UDP, используя порт 1434. Браузер SQL Server отвечает с помощьюпорт TCP / IP или именованный канал запрошенного экземпляра.

Очевидно, когда UDL или SSMS используются для удаленного подключения к имени экземпляра SQL Server, запрос для разрешения хранилища номеров портов имени экземпляра находится где-то в клиентемашина.

Я проверил это на двух клиентских машинах.Когда был открыт порт UDP 1434, первая машина могла подключиться к имени экземпляра SQL Server.Затем я закрыл порт и попытался снова с этой машиной.Первый клиент все еще мог подключиться без открытия порта.Затем я попытался со второй машиной, но она не могла подключиться.

Мне просто интересно, как и где происходит это кэширование?

1 Ответ

0 голосов
/ 24 декабря 2018

Клиентские API, такие как SqlClient, по умолчанию используют пул соединений , чтобы избежать издержек при разрешении имен, физическом сетевом соединении и аутентификации при каждом открытии соединения.Когда исходное соединение закрыто, оно добавляется в пул соединений, где его можно использовать повторно при следующем открытии другого соединения с такими же атрибутами.В этом случае клиентский API просто извлекает и не использует соединение из пула, избегая значительных накладных расходов на установление физического соединения.

При использовании именованного экземпляра пул соединений также исключает необходимость каждый раз запрашивать службу браузера SQL Server.соединение открыто, так что это объясняет ваши наблюдения.Я подозреваю, что если вы закроете и повторно запустите приложение после блокировки UDP-порта 1434, соединение SQL для именованного экземпляра не будет выполнено из-за сбоя запроса грамматики данных в браузере SQL Server при открытии начального соединения.

...