Не удается подключиться к SQL LocalDB из Windows Service, приложение WPF и SSMS работают нормально?

У некоторых проблем с системой, которую я разрабатываю. Макет в том, что касается этого вопроса, - это установщик 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.

Может ли кто-нибудь помочь?

Ответ 1

Я не профессионал в службах Windows.

Я думаю, что ошибка в обслуживании Windows, которое вы написали. При нулевой изоляции сеанса вам может потребоваться запустить службу Windows в указанной учетной записи пользователя.
Было бы полезно, если вы можете указать учетную запись пользователя, с которой работает служба Windows. По умолчанию служба запускается в другой учетной записи пользователя с именем SYSTEM. У этой учетной записи может быть не доступ к базе данных. Это может вызвать проблему.

Ответ 2

Можете ли вы проверить, является ли это проблемой, с которой вы столкнулись, и предлагаемое решение помогает вам?

http://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

То, что вы описываете, странно, все хорошо выглядит из вашего описания, но факт, что это база данных localdb, является подозрительной.

Ответ 3

Вы пытались добавить Integrated Security=True; в строку подключения?