我正在开发的系统遇到一些问题。就这个问题而言,布局是 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
所以我重申;此登录在 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"
这是我正在使用的连接字符串:
<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 状态下没有对其进行任何操作。
有人可以帮忙吗?
最佳答案
我不是 Windows 服务方面的专业人士。
我认为问题出在你编写的Windows服务中。使用 session 零隔离,您可能必须在指定的用户帐户中运行 Windows 服务。
如果您可以提供 Windows 服务运行的用户帐户,将会很有帮助。默认情况下,该服务在称为 SYSTEM 帐户的不同用户帐户中运行。该帐户可能没有访问数据库的权限。这可能会导致问题。
关于.net - 无法从 Windows 服务连接到 SQL LocalDB,WPF 应用程序和 SSMS 工作正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445629/