SqlConnection.Open () зависает в Windows XP - PullRequest
2 голосов
/ 04 февраля 2011

У меня есть простой кусок кода в консольном приложении .NET, который пытается открыть соединение SQL с сервером:

using (SqlConnection connection = new SqlConnection("<my connection string>"))
{
    connection.Open();
}

Он отлично работает на моем компьютере с Windows 7, но на другом компьютере под управлением Windows XP x64 вызов Open () зависает бесконечно.

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

РЕДАКТИРОВАТЬ: Хорошо, похоже, проблема с брандмауэром. Я подключил свой компьютер с Windows 7 к тому же Интернет-соединению, что и компьютер с Windows XP, и теперь он тоже зависает ... какие порты мне нужно открыть, чтобы пропустить трафик SQL, и как мне их открыть?

РЕДАКТИРОВАТЬ: В случае, если кто-то заинтересован, мой сетевой администратор блокировал исходящий трафик на порт 1433 из-за страха червя Slammer ...

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

Поскольку я могу пропинговать и пытаться подключиться к database2.ehost-services.com (хотя мне не удалось войти в систему), давайте попробуем упростить строку подключения:

Data Source=database2.ehost-services.com;Initial Catalog=myDatabaseName;User ID=myUser;Password=myP@ssword;

EDIT

Чтобы ответить на ваш вопрос о том, почему не истек срок действия строки подключения, MSDN описывает атрибут pooling строки подключения следующим образом:

Когда значение этого ключа установлено в true, любое вновь созданное соединение будет добавлено в пул при закрытии приложением.При следующей попытке открыть то же соединение это соединение будет извлечено из пула.

Соединения считаются одинаковыми, если они имеют одинаковую строку соединения.Разные соединения имеют разные строки соединения.

Значением этого ключа может быть «true», «false», «yes» или «no».

Итак, ядумая, что, возможно, ваш экземпляр соединения еще не был на самом деле объединен в тайм-аут./ IP.Может быть, это может вам помочь (используйте диспетчер конфигурации SQL Server, чтобы выбрать свой протокол).Проверьте в [Конфигурация собственного клиента SQL 9.0 / 10.0], и вы должны увидеть список протоколов.Убедитесь, что TCP / IP указан в порядке перед именованными каналами, а также включен.Например, мой порядок от 1 до 3: общая память, TCP / IP, именованные каналы и VIA отключены.

EDIT

Попробуйте создать псевдоним с TCP/ IP протокол выбран и подключение к вашему псевдониму?Вы также можете сделать это с помощью диспетчера конфигурации SQL Server.

РЕДАКТИРОВАТЬ

Поскольку операционная система решила проблему, я прокомментировал ответ другого лица:

Должна быть явно создана политика безопасности, которая блокирует исходящие сообщения

и SOB, вот что это было - администратор сети заблокировал исходящий трафик через порт 1433. Рад, что вы поняли это!

1 голос
/ 04 февраля 2011

Вы уверены, что ваш сервер базы данных доступен с обоих ваших компьютеров?Вы пытались подключиться к нему из проблемной системы с помощью другого инструмента?

И как долго вы позволяете ему работать?

...