Ошибка подключения к SQL из WCF с использованием LINQ - но влияет только на один сервер - PullRequest
2 голосов
/ 27 июня 2010

Это ужасное название, извините.

Вот сценарий:

Служба WCF использует LINQ для получения данных из базы данных SQL. Служба развернута на 4 (почти) идентичных серверах, работающих под управлением IIS. Все разговаривают с одним и тем же сервером SQL на отдельной машине.

3 из 4 серверов работают отлично.

На 4-м сервере мы получаем это

Сетевой или экземплярный произошла ошибка при установлении подключение к SQL Server. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра правильно и что SQL Server настроен для разрешения удаленного соединения. (поставщик: именованные трубы Поставщик, ошибка: 40 - Не удалось открыть подключение к SQL Server)

Исключение выдается при первом использовании моего LINQ DataContext для выполнения запроса.

Все 4 сервера используют одинаковую строку подключения, определенную в их файле machine.config.

На проблемном сервере я могу подключиться с помощью SQL Management Studio с теми же учетными данными, что и в моем файле machine.config. Я также написал простой клиент командной строки, который устанавливает соединение ADO.NET с сервером базы данных, используя ту же строку подключения. Это работает.

Один и тот же код развернут на всех 4 серверах с одинаковыми настройками.

Что может быть причиной того, что только мой клиент только на одном сервере выдает эту ошибку?

Я сделал все возможное, чтобы исключить обычных подозреваемых (порт заблокирован брандмауэром, удаленный доступ не включен на SQL Server, используется именованный экземпляр SQL и т. Д.). Я также проверил, есть ли какие-либо жестко закодированные строки соединения в моем коде или где-либо еще в иерархии конфигурации. Насколько я могу судить, это не причина.

1 Ответ

2 голосов
/ 01 июля 2010

У нас это работает. Я не совсем понимаю проблему, но суть в том, что на сервере БД не был включен TCP / IP, только именованные каналы. 3 сервера, которые работали, могли подключаться через именованные каналы. Плохой сервер не смог использовать именованные каналы - я думаю , потому что он был в другой сети (или сегменте), чем сервер БД.

Что я до сих пор не понимаю, так это то, почему я смог использовать SQL Mgmt Studio для подключения с плохого сервера. Если ни TCP / IP, ни каналы не были доступны, как они соединялись? Есть ли другой способ подключения?

Так что я рад, что это работает, но немного неудобно, что я не до конца понимаю основную проблему, которая его вызвала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...