2009-10-29 89 views
0

我正在使用WCF服务(使用Fluent NH实施),它作为Windows服务托管。具有集成安全性的WCF Nhibernate服务= True错误

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

,当我在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服务和控制台应用程序坐在我唯一的本地机器上,

谁能帮我理解为什么它不具有集成安全=真正的工作?

谢谢!

+1

在您的Windows服务托管您的WCF运行在什么帐户下?这是试图连接到SQL Server的用户 - 该用户可能不被允许这样做。 – 2009-10-29 17:26:20

+0

谢谢你的回复。那么,我不确定'什么帐户'。但是我对所有其他应用程序的Integrated Security = true一直在做。即使我单元测试的wcf serice方法(不通过Windows服务调用),它适用于集成安全性很好。当我在测试控制台应用程序中通过Windows服务调用它时,才会出现此错误。 – iniki 2009-10-29 17:31:17

+0

是的,当然 - 如果您在Windows服务之外运行WCF服务,它将在您自己的用户下运行 - 并且我假设您拥有必要的权限和所有权限。但是当你在Windows服务中运行某些东西时,你必须在Windows服务上定义哪个服务器将运行在哪个帐户上 - 如果该帐户没有足够的权限,如果它没有SQL Server帐户,它将无法登录。 – 2009-10-29 20:22:25

回答

4

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

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

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

转到SQL Server Management Studio并检查以查看安全 - >登录下是否运行该服务的帐户(您使用任务管理器找到的帐户)已列出。如果没有,请添加并授予权限。

+0

我的观点正是如此 - 感谢您更准确,清晰,广泛地使用它! ;-) – 2009-10-29 20:22:55

+0

谢谢marc和phyllis的回复。 是的,你是对的,当我在任务管理器中检查用户帐户时,他们正以不同的用户身份运行。对于单元测试,它显示我的名字。而对于Windows服务,它显示为SYSTEM。我将Windows Service LogOn作为属性更改为自己,并且它工作正常:-)。再次感谢。 – iniki 2009-10-30 09:21:28