我正在使用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?
谢谢!
答案 0 :(得分:4)
Integrated Security = true表示此应用程序将尝试使用您要连接的SQL Server上的“Windows身份验证”模式对自身进行身份验证。该服务在特定用户帐户下运行 - 它将使用该用户的帐户权限登录SQL。
如果您的SQL Server实例不允许该Windows服务的用户帐户登录,您将收到该错误。服务在单元测试中运行的用户很可能与测试控制台应用程序不同。
试试这个 - 运行你的测试控制台应用程序并打开任务管理器。在“流程”选项卡下,查看与您的服务相关联的流程及其运行的用户名。运行您的单元测试框架并记下用户名 - 它们可能不同。
转到SQL Server Management Studio并检查以查看安全性 - &gt;登录是否列出了服务运行的帐户(使用任务管理器找到的帐户)。如果没有,请添加它并授予其权限。