2009-10-29 53 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