0

我正在开发 WCF 服务(使用 Fluent NH 实现),它作为 Windows 服务托管。

我正在使用控制台应用程序来测试调用服务方法。

现在,当我将 hibernate.cfg.xml 中的连接字符串设置为

<property name="connection.connection_string">Server=dev;Initial Catalog=DBTest;Integrated Security=True;</property>

它抛出错误: SqlException: 用户登录失败

但是,如果我将连接字符串更改为:

<property name="connection.connection_string">Server=dev;Initial Catalog=DBTest;User Id=twr;Password=manager1;</property>

它成功调用了服务方法。

虽然所有 WCF 服务库、托管 Windows 服务和控制台应用程序仅位于我的本地计算机上,

谁能帮我理解为什么它不能与 Integrated Security=true 一起使用?

谢谢!

4

1 回答 1

4

Integrated Security = true 意味着此应用程序将尝试在您连接到的 SQL Server 上使用“Windows 身份验证”模式对自身进行身份验证。该服务在特定用户帐户下运行 - 它将使用该用户的帐户权限登录 SQL。

如果您的 SQL Server 实例不允许该 Windows 服务的用户帐户登录,您将收到该错误。在您的单元测试中运行服务的用户很可能与测试控制台应用程序不同。

试试这个 - 运行您的测试控制台应用程序并打开任务管理器。在进程选项卡下,查看与您的服务关联的进程以及运行它的用户名。运行您的单元测试框架并记下用户名——它们可能不同。

转到 SQL Server Management Studio 并检查在 Security -> Logins 下是否列出了运行该服务的帐户(您使用任务管理器找到的帐户)。如果没有,请添加它并授予它权限。

于 2009-10-29T18:00:08.917 回答