簡體   English   中英

使用 TopShelf 的 Windows 服務:底層提供程序在打開時失敗。 用戶登錄失敗

[英]Windows service using TopShelf: The underlying provider failed on Open. User logon failure

我的項目是由 TopShelf 創建的窗口服務。 它將數據存儲在本地數據庫中,但發生錯誤:

System.Data.Entity.Core.EntityException:底層提供程序在打開時失敗。 > System.Data.SqlClient.SqlException: 用戶登錄失敗 'USER'

我的字符串連接是:

  <connectionStrings>
    <add name="ValeQpsContext" connectionString="Data Source=.\SQLEXPRESS01;Initial Catalog=Vale.Qps;Integrated Security=False;
         User Id=USER; Password=xxxx" 
         providerName="System.Data.SqlClient" />
  </connectionStrings>

我的數據庫是一個使用 SQL EXPRESS 的本地數據庫,我的服務作為本地系統運行。

這是在數據庫中存儲數據的方法:

public static void Insert<T>(T entity)
            where T : class
        {
            try
            {
                using (var ctx = new MyContext())
                {
                    ctx.Entry(entity).State = System.Data.Entity.EntityState.Added;

                    ctx.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

這是一個完整的內部異常:

底層提供程序在 Open 上失敗。 System.Data.Entity.Core.EntityException:底層提供程序在打開時失敗。 > System.Data.SqlClient.SqlException: 用戶登錄失敗 'USER'。 em System.Data.ProviderBase.DbConnectionPool.TryGetConnection em System.Data.ProviderBase.DbConnectionPool.TryGetConnection em System.Data.ProviderBase.DbConnectionFactory.TryGetConnection em System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal em System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection em System.Data.SqlClient.SqlConnection.TryOpenInner em System.Data.SqlClient.SqlConnection.TryOpen em System.Data.SqlClient.SqlConnection.Open em System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<>c.b__13_0 em System .Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch em System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open em System.Data.Entity.Core.EntityClient.EntityConnection.b__55_0 em System.Data.Entity.SqlServer .DefaultSqlExecutionStrategy.<>c__DisplayClass2_0.b__0 em System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute em System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execut e em System.Data.Entity.Core.EntityClient.EntityConnection.Open

相同的權限(用戶和密碼)在 SSMS 中定義到數據庫。 錯誤在哪里?

我找到了解決方案。 我將連接字符串更改為:

  <connectionStrings><add name="MyContext" connectionString="Data Source=.\SQLEXPRESS01;Initial Catalog=MyDatabase;Integrated Security=SSPI;AttachDBFilename=C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS01\MSSQL\DATA\MyDatabase.mdf;User Id=DOMAIN\USER; Password=xxxxx" providerName="System.Data.SqlClient" /></connectionStrings>

而且我還更改了安裝服務的命令。 添加登錄用戶:

MyService.exe install -username:DOMAIN\USER -password:xxxx start

所以,這不是完全錯誤,但現在可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM