WebApp видит базу данных SQL на виртуальном ПК, а консольное приложение - нет - PullRequest
1 голос
/ 02 марта 2011

Я разрабатываю группу веб-приложений для базы данных SQL и некоторые консольные приложения, чтобы немного поиграться с данными. Мой рабочий сервер и dev-сервер оба Server2008 32-разрядные. Разница в том, что сервер dev находится на виртуальном ПК и работает под управлением SqlExpress 2008.

На данный момент веб-приложение и консольное приложение имеют одинаковые настройки подключения. Когда настройки указаны для производства, веб-приложение и консольное приложение работают нормально. При указании на dev веб-приложение работает нормально, но консольное приложение не может подключиться (ошибка: 40, ниже). Какая разница между двумя причинами такого поведения?

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

Виртуальный ПК подключен к сети через Microsoft Loopback Connection. То же самое происходит, когда я переключаюсь на подключение к Ethernet.

PortQry на обоих выглядит одинаково:

Dev:

UDP-порт 1434 (служба ms-sql-m): СЛУШАТЬ или ФИЛЬТРИРОВАТЬ

Отправка запроса SQL Server на UDP-порт 1434 ...

Ответ сервера:

ServerName DEV
Имя_экземпляра SQLEXPRESS
IsClustered No
Версия 10.50.1600.1
tcp 49282
np \ DEV \ pipe \ MSSQL $ SQLEXPRESS \ sql \ query

==== Конец ответа на запрос SQL Server ====

UDP-порт 1434 СЛУШАЕТ

Производство:

UDP-порт 1434 (служба ms-sql-m): СЛУШАТЬ или ФИЛЬТРИРОВАТЬ

Отправка запроса SQL Server на UDP-порт 1434 ...

Ответ сервера:

ServerName PRODUCTION
Имя экземпляра MSSQLSERVER
IsClustered No
Версия 9.00.4035.00
tcp 1433
np \ PRODUCTION \ pipe \ sql \ query

==== Конец ответа на запрос SQL Server ====

UDP-порт 1434 СЛУШАЕТ

Строки подключения по запросу:

<connectionStrings>
    <add name="ProductionConnection" connectionString="Data Source=production.productiondomain.local;Initial Catalog=XXXXXXX;Persist Security Info=True;User ID=xxxx;Password=xxxx" providerName="System.Data.SqlClient"/>
    <add name="DevConnection" connectionString="Data Source=dev\SQLEXPRESS;Initial Catalog=XXXXXXX;Persist Security Info=True;User ID=xxxx;Password=xxxx" providerName="System.Data.SqlClient"/>
</connectionStrings>

1 Ответ

0 голосов
/ 15 марта 2011

На виртуальном ПК, на котором вы установили SqlServer Express 2008, проверьте, существует ли имя группы, похожее на это: 'SQLServer2005MSSQLUser $ PIETRO $ SQLEXPRESS'.

Перейдите в раздел «Локальные пользователи и группы» в разделе «Управление компьютером» этого виртуального компьютера.

Описание группы будет выглядеть примерно так: «Члены группы имеют необходимые права доступа и привилегии, которые должны быть назначены в качестве учетной записи для входа в систему для ассоциированного экземпляра SQL Server и полнотекстового поиска SQL Server в SQL Server 2005».

Чтобы иметь возможность подключиться к моему локальному SQL Express 2005 в своей записной книжке, мне пришлось добавить учетную запись Windows, которую я использую для входа в эту записную книжку, в упомянутую группу окон. И мне пришлось использовать эту строку подключения:

"Data Source=PIETRO\SQLEXPRESS;Initial Catalog=irisdb;Integrated Security=True;"

Важно отметить часть «Integrated Security = True». Это означает, что SQL Express будет аутентифицировать мою попытку подключения, используя мою учетную запись Windows.

Если вы не используете встроенную защиту в строке подключения, значит, вы используете аутентификацию SQLServer, и это означает, что идентификатор пользователя и пароль в строке подключения должны быть действительным именем входа SQL Server:

User ID=xxxx;Password=xxxx

Я помню, что создавать учетные записи в SQL Express было непросто, поскольку SQL Express 2005 не поставляется с этим инструментом управления, но, если он у вас есть, дважды проверьте значения идентификатора пользователя и пароля, которые вы используете в своем приложении. Строка подключения для Dev является действительным логином в вашем SqlExpress 2008.

Я предполагаю, почему веб-приложение подключается к DEV Sql Express, так как веб-приложение, скорее всего, работает в контексте учетной записи компьютера ASP.NET, и каким-то образом ваше устройство SQL Express 2008 успешно аутентифицирует эту учетную запись.

В итоге ....

Если вы используете встроенную защиту, укажите ее в строке подключения и добавьте учетную запись Windows, под которой работает ваше консольное приложение, в группу sql express на виртуальном ПК.

Если вы используете проверку подлинности сервера sql, то идентификатор пользователя и пароль в строке подключения должны быть действительным именем входа sql express.

Удачи!

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