2011-02-04 2 views
2

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

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

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

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

EDIT: Хорошо, это проблема с файерволом. Я подключил свою машину Windows 7 к тому же интернет-соединению, что и компьютер под управлением Windows XP, и теперь он тоже зависает ... какие порты мне нужно открыть, чтобы пропускать SQL-трафик и как я могу их открыть?

EDIT: В случае, если кто интересуется, моя сеть админ блокирует исходящий трафик на порт 1433 из страха червя Slammer ...

+1

Вы уверены, что это бесконечно? Вы должны получать исключение TimeOutException (по умолчанию 30 секунд). Кроме того, вы можете подключиться к экземпляру SQL Server с компьютера WinXP, используя что-то еще (например, SSMS Express)? Является ли экземпляр SQL Server именованным экземпляром? – bitxwise

+0

Если это действительно заблокировано, я бы проверил брандмауэр Windows или другой продукт брандмауэра, чтобы узнать, разрешает ли он трафик на портах SQL – Sean

+1

@bitxwise ранее сегодня я разрешил ему работать более 4 часов. У меня не было тайм-аута. – HighCommander4

ответ

1

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

Data Source=database2.ehost-services.com;Initial Catalog=myDatabaseName;User ID=myUser;[email protected]; 

EDIT

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

When the value of this key is set to true, any newly created connection will be added to the pool when closed by the application. In a next attempt to open the same connection, that connection will be drawn from the pool.

Connections are considered the same if they have the same connection string. Different connections have different connection strings.

The value of this key can be "true", "false", "yes", or "no".

Итак, я думаю, что, возможно, ваш экземпляр подключения еще не был объединен до таймаута.

EDIT

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

EDIT

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

EDIT

Как ОП разрешил проблему, я сделал свой комментарий на чужой ответе:

A security policy that blocks outgoing would have to be explicitly created

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

+0

С помощью этой строки подключения она истекает через 30 секунд и отображает последовательность Ошибка ng: «При установлении соединения с SQL Server возникла связанная с сетью или конкретная ошибка экземпляра. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (поставщик: поставщик именованных труб, ошибка: 40 - не удалось открыть соединение с SQL Server) ' – HighCommander4

+0

Можете ли вы ping database2.ehost-services.com с машины WinXP? – bitxwise

+0

Да, я могу пинговать. – HighCommander4

1

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

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

+0

Вы правы, это, похоже, проблема с мое соединение на компьютере с Windows XP ... см. мое редактирование выше. – HighCommander4

+0

@ HighCommander4: В тех случаях, когда я столкнулся, порт TCP/1433 был достаточным. –

+0

Я думал, что TCP/1433 должен быть открыт на стороне сервера , но не на стороне клиента ... – bitxwise

Смежные вопросы