無法從 Windows 服務、WPF 應用程序和 SSMS 連接到 SQL LocalDB 工作正常?
我正在開發的系統遇到一些問題。就這個問題而言,佈局是一個 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 服務中。使用會話零隔離,您可能必須在指定的使用者帳戶中執行 Windows 服務。
如果您可以提供執行 Windows 服務的使用者帳戶,將會很有幫助。預設情況下,該服務在稱為 SYSTEM 帳戶的不同使用者帳戶中執行。此帳戶可能沒有訪問數據庫的權限。這可能會導致問題。
您能否檢查這是否是您遇到的問題,並且建議的解決方案對您有幫助?
http://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
您所描述的內容很奇怪,從您的描述來看,一切看起來都不錯,但是 localdb 數據庫這一事實令人懷疑。