无法从Windows服务,WPF应用程序和SSMS连接到SQL LocalDB工作正常吗?

Cal*_*leb 10 .net sql-server connection-string windows-services database-connection

我正在开发的系统遇到一些麻烦.就这个问题而言,布局是一个WiX内置的msi安装程序,它安装SQL LocalDB 2012,WPF应用程序和Windows服务.Windows服务和WPF应用程序都要与同一个数据库进行通信,应用程序由用户交互驱动,计算机上的服务也是如此.

一切都安装得很干净,数据库实例以混合模式安装,因此我的数据库初始化程序为实例和数据库创建了一个新的登录和用户,而在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
Run Code Online (Sandbox Code Playgroud)

所以我重申一下; 此登录在SSMS中工作得很好,并允许我登录并访问由WPF应用程序的初始化程序创建的数据库.

但是,我无法从Windows服务登录此数据库.我确保在我的连接字符串中使用新登录,并在那里正确设置了所有内容.我怎么知道这个?因为当我将连接字符串复制到我的WPF应用程序并使用它而不是Windows身份验证时,它可以工作!?!

该服务不断失败并显示以下消息:

"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"
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的连接字符串:

<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" />
Run Code Online (Sandbox Code Playgroud)

似乎存在一些障碍,即保持与Windows服务的连接正确连接,而其他人没有这样的问题.LocalDB安装是新鲜的,除了DB和创建的Login/User之外,没有从OOB状态对它进行任何操作.

有人可以帮忙吗?

小智 6

我不是Windows服务专业人士.

我认为错误是在你写的windows服务中.使用会话零隔离,您可能必须在指定的用户帐户中运行Windows服务.
如果您可以为Windows服务运行的用户帐户提供帮助,将会很有帮助.默认情况下,服务在名为SYSTEM帐户的其他用户帐户中运行.此帐户可能没有访问数据库的权限.这可能会导致问题.