0

машины 1Строка соединения таймаут с именем сети, но работает с IP

  • Windows Server 2008
  • SQL Server 2008

базы данных. Содержит всю информацию, которую используют наши сайты.


машина 2

  • Windows Server 2012
  • IIS 8

Веб-сервер. Использование IIS для размещения двух сайтов:

  • сайт Производство: (по умолчанию) имеет самую последнюю дату пользовательского интерфейса и функции
  • резервного копирования сайта: Старые UI, но до сих пор используют самые последние данные машина 1

Вот как это работает:

  1. Пользователь переходит на сайт, размещенный на Machine 2, и вводит информацию о своей компании
  2. Машина 1 запрошена для строки подключения этой компании.
  3. Сайт использует строку подключения для подключения к правильной базе данных на машине 1.

Проблема заключается в том, что около 1/3 из строки соединения используют имя сети (например, «Источник данных =„Machine1“ ; "), в то время как другие 2/3 используют IP-адрес (например,« Источник данных = 192.168.1.200; »). При подключении через сайт Production происходит тайм-аут, если используется строка подключения с сетевым именем. Однако, если один и тот же пользователь, используя одни и те же учетные данные, регистрируется на сайте резервного копирования, все работает нормально, независимо от того, какой источник данных используется.

Я создал простой скрипт Powershell для проверки соединения с Machine 2; имена сетей и IP-адреса работают, что заставляет меня подозревать, что это проблема IIS или web.config. Я прошел через обе широко, и только эти различия я заметил:

  • Различные Пулы приложений в IIS: Тем не менее, когда я побежал «Get-CimInstance Win32_Process» он показал оба экземпляра w3wp. exe был запущен с той же командой и аргументами (за исключением разных труб)
  • Немного другой web.config. Сайт Backup имеет полностью автономный web.config, а Production on хранит его строки подключения - отдельный файл.

Я бил головой об этом в течение нескольких дней.Очень ограничено в шагах, которые я могу принять, рассматривая этот веб-сайт и базу данных . Любые советы приветствуются.

+0

попробовать machine1.fullyqualifed.domainname.com – granadaCoder

+0

также попробовать machine1 с сетевым протоколом, указанным в строке подключения. см. https://www.connectionstrings.com/define-sql-server-network-protocol/; Network Library = DBMSSOCN; – granadaCoder

+0

Сетевой протокол был проблемой, хотя и по-другому. По какой-то причине приложение использует Named Pipes (которые отключены на сервере) вместо TCP. Переход к завтрашнему дню, если включение Named Pipes выполнило трюк (конфигурация сервера может быть сброшена только один раз в день). Спасибо за помощь. – TripleD

ответ

1

Попробуйте поместить сетевую библиотеку в строку соединения, чтобы заставить tcp.

см connectionstrings.com/define-sql-server-network-protocol

; Network Library = DBMSSOCN;

PS

Угу. Был там, сделал это. 4 дня посещения клиента «на сайте» ....... и это был протокол. Итак, как я научился принудительно его использовать через строку соединения. Вы также можете попробовать следующее:

Создайте (временно) Системный DSN (ODBC в Панели управления) с таким странным названием, как «peanutbutter». Там где-то есть кнопка подключения клиента. Принудите его к tcp. Затем найдите свой реестр для арахисового масла и узнайте, как хранится сетевая библиотека.

Картинка стоит тысячи слов. См. Левую часть изображения ниже. (Случайное изображение из старого межсети)

http://web.synametrics.com/resources/SQLServerExpress8.png

+0

Это может пролить свет на него: (может быть, датировано не так) https://support.microsoft.com/en-us/kb/328383 – granadaCoder

+0

Извинения за то, что так долго отвечали. Я начал по пути, который вы показали здесь, когда мои коллеги решили просто включить Named Pipes на сервере. Работал как шарм, но я не совсем уверен, что он не будет конфликтовать ни с чем в долгосрочной перспективе. Я собираюсь пометить эту страницу, если нам нужно найти более прямое решение, а не обходное решение. Еще раз спасибо. – TripleD