У некоторых проблем с системой, которую я разрабатываю. Макет в том, что касается этого вопроса, - это установщик MSI с поддержкой WiX, который устанавливает SQL LocalDB 2012, приложение WPF и службу Windows. Как Windows Service, так и WPF-приложение должны взаимодействовать с одной и той же базой данных, приложением, управляемым взаимодействием пользователя и службой по таймеру.
Все устанавливается корректно, экземпляр DB устанавливается в смешанном режиме, поэтому мой инициализатор базы данных создает новый логин и пользователя для экземпляра и db, а в SSMS они кажутся настроенными правильно. Я могу войти в систему и запросить таблицы просто отлично, используя новый логин. Вот код, который я использовал для создания логина:
IF NOT EXISTS
(SELECT loginname
FROM master.dbo.syslogins WHERE name = 'BP_SERVICELOGIN')
BEGIN
CREATE LOGIN[BP_SERVICELOGIN] WITH PASSWORD = 'pw';
CREATE USER[bpUser] FOR LOGIN[BP_SERVICELOGIN] WITH DEFAULT_SCHEMA = dbo;
USE DatabaseName;
EXEC sp_addrolemember 'db_owner', 'bpUser'
END
Поэтому я повторяю; этот вход работает очень хорошо в SSMS и позволяет мне войти в систему и получить доступ к базе данных, которая была создана при помощи инициализатора приложений WPF.
Однако я НЕ могу войти в эту базу данных из службы Windows. Я уверен, что использую новый логин в моей строке подключения, и все там правильно настроено. Откуда я знаю это? Потому что, когда я копирую строку подключения в свое приложение WPF и использую это вместо Windows auth, это WORKS!?!
Служба постоянно терпит неудачу с сообщением:
"System.Data.Entity.Core.EntityException: The underlying provider failed on Open. in EntityFramework:File: Method:Open Line:0 Column:0 System.Data.SqlClient.SqlException: Login failed for user 'BP_SERVICELOGIN'. in .Net SqlClient Data"
Вот строка подключения, которую я использую:
<add name="ConnStringName" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=DbName;User Id=BP_SERVICELOGIN;Password=pw;MultipleActiveResultSets=True;Application Name=ServiceName" />
Похоже, есть какой-то барьер, который не позволяет подключению к службе Windows правильно подключаться, в то время как другие не имеют такой проблемы. Установка LocalDB является свежей и отличной от БД и созданного входа/пользователя, ничего не сделала из состояния OOB.
Может ли кто-нибудь помочь?