У меня есть производственный сайт, который годами работал с экземпляром SQL Server 2000 по умолчанию на сервере с именем MDWDATA. TCP-порт 1433 и именованные каналы включены там. Моя цель - заставить это веб-приложение работать с копией базы данных, обновленной до SQL Server 2008. Я установил SQL2008 с пакетом обновления 1 на сервере под названием DEVMOJITO и протестировал новую базу данных, используя различные настольные программы VB6, которые выполняют различные хранимые процедуры в Клиент-серверная мода и части самого сайта прекрасно работают с обновленной базой данных, расположенной в этом именованном экземпляре SQL2008. Итак, хотя я рад, что обновление базы данных выглядит нормально, есть часть этого веб-сайта, которая выходит из строя с этим поставщиком именованных каналов: не удалось открыть соединение с SQL Server [1231]. Я думаю, что эта ошибка вводит в заблуждение. Я отключил именованные каналы в экземпляре SQL2000, используемом на производственном сайте, перезапустил SQL, и весь код ASP продолжал работать нормально (плюс у нас есть брандмауэр между обоими серверами базы данных и этими виртуальными веб-каталогами на открытом веб-сервере.
URL-адрес моего рабочего виртуального каталога, который отображает рабочую страницу:
URL-адрес моего v-каталога для разработки, который демонстрирует неисправную страницу:
Весь код одинаков на сайтах prod и dev, за исключением того, что на dev я пытаюсь подключиться к обновленной базе данных.
Я знаю, что нужно проверить десятки вещей, которые я искал, но вот несколько вещей, которые я могу предложить, чтобы помочь вам помочь:
Код, который терпит неудачу, - это Javascript на стороне сервера, адаптированный из пакета кода Брента Эшли «Javascript Remote Scripting (JSRS)» несколько лет назад. Он работает AJAX-подобным образом, отправляя запросы обратно на разные страницы ASP, а затем обрабатывая обратный вызов. Я думаю, что ключевым моментом здесь является то, как я изменил соединение с базой данных: (я не могу заставить Javascript отформатировать прямо здесь!)
функция setDBConnect (источник данных)
{
var strConnect; // ADO строка подключения
// strConnect = "DRIVER = SQL Server; SERVER = MDWDATA; UID = uname; PASSWORD = x; DATABASE = StagingMDS;";
strConnect = "Provider = SQLNCLI10; Сервер = DEVMOJITO \ MSSQLSERVER2008; Uid = uname; Pwd = x; DATABASE = StagingMDS;";
возврат strConnect;
}
функция serializeSql (sql, источник данных)
{
var conn = новый ActiveXObject ("ADODB.Connection");
var ConnectString = setDBConnect (источник данных);
conn.Open (ConnectString);
var rs = conn.Execute (sql);
Обратите внимание, как отличается строка подключения. Я думаю, что это может быть проблемой, но я не знаю, что делать. Я удивлен, что возвращенная ошибка говорит, что были задействованы «именованные каналы», потому что я действительно хотел использовать TCP Синтаксис строки подключения здесь такой же, как и успешно используемый в другой части сайта, использующей VBScript, который я вставлю здесь, чтобы показать:
if DataBaseConnectionsAreNeeded(strScriptName) then
dim strWebDB
Set objConn = Server.CreateObject("ADODB.Connection")
if IsProductionWeb() Then
strWebDB = "DATABASE=MDS;SERVER=MDWDATA;DRIVER=SQL Server;UID=uname;PASSWORD=x;"
end if
if IsDevelopmentWeb() Then
strWebDB = "Provider=SQLNCLI10;Server=DEVMOJITO\MSSQLSERVER2008;Database=StagingMDS;UID=uname;PASSWORD=x;"
end if
objConn.ConnectionString = strWebDB
objConn.ConnectionTimeout = 30
objConn.Open
set oCmd = Server.CreateObject("ADODB.Command")
oCmd.ActiveConnection = objConn
Этот код работает как в виртуальных каталогах prod, так и в dev, а также в другом коде в других частях Интернета, где ASP.NET правильно работает с обеими базами данных. Именованные каналы и TCP включены на каждом сервере. Я не понимаю строку, используемую Pipes, но я всегда использую значения по умолчанию.
Интересно, почему приведенный выше вызов Javascript приводит к использованию именованных каналов вместо TCP. Любые идеи будут с благодарностью.