У меня есть старое веб-приложение .net 1.0, которое требует некоторого обслуживания. Я использовал автообновление, чтобы обновить его до .net 3.5 (а затем попробовал 2.0), но теперь он не может подключиться к базе данных.
На первый взгляд это похоже на проблему строки подключения noob, но я думаю, что это скорее связано с некоторой тонкой проблемой обновления.
Я получаю общее сообщение об ошибке:
Произошла ошибка при установлении соединения с сервером. При подключении к SQL Server 2005 этот сбой может быть вызван тем, что в настройках по умолчанию SQL Server не разрешает удаленные подключения. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)
Исходный код довольно простой, без наворотов:
protected static SqlConnection objConn;
objConn = new SqlConnection(strConnectionString);
try
{
objConn.Open();
}
а также пробовал как:
using (objConn = new SqlConnection(strConnectionString))
{
objConn.Open();
...
}
Строка подключения берется из web.config, и с помощью отладчика, чтобы установить точку останова и просмотреть свойства соединения, прежде чем он попытается его открыть, я вижу, что он правильно нашел строку соединения:
connectionString = "Источник данных = XXX.XXX.XXX.XXX; Исходный каталог = XXXXXX; Идентификатор пользователя = XXXXXX; Пароль = XXXXXX"
Горстка вещей, которые я исключил:
Сообщение об ошибке одинаково при подключении к Sql Server 2005 или Sql Server 2000.
Нет ошибок или предупреждений в списке ошибок VS.
Строка подключения такая же, как и на нескольких других веб-сайтах, которые также используют ту же базу данных, поэтому я знаю, что строка подключения правильная.
Я пытался подключить его с моего локального компьютера (где я могу подключиться к базам данных с помощью Sql Query Analyzer) и с обычного веб-сервера, поэтому это не проблема брандмауэра и не проблема max-соединений.
Он подключается к IP-адресу сервера, поэтому это не проблема браузера компьютера (и другие веб-приложения могут нормально подключаться.
TCP и именованные каналы - это 2 сетевых протокола, включенных на сервере sql.
Добавление "Сетевая библиотека = DBMSSOCN;" в строке подключения изменяется сообщение об ошибке, чтобы включить «поставщик: поставщик TCP, ошибка» (было что-то еще, что я изменил в строке подключения на другой день, который также имел это влияние, но я не могу вспомнить, что сейчас.)
Я уже просмотрел 3 аналогичных сообщения о переполнении стека:
(Не могу перечислить ссылки здесь, потому что я новый пользователь, но их идентификаторы вопроса, если кто-то еще хочет дать ссылку на них в комментарии: 63875, 1038888, 846479)
И в этой статье на другом сайте было несколько хороших идей, которые можно попробовать, но они тоже не помогли:
http://weblogs.sqlteam.com/tarad/archive/2008/05/23/60609.aspx
Мое лучшее предположение заключается в том, что что-то вызвано обновлением между версиями .net - возможно, что-то не так в web.config?
Это приложение на C #, довольно маленькое / базовое, но разделенное на три проекта.