簡體   English   中英

嘗試連接到另一台計算機上存儲的數據庫時出現“等待操作超時”錯誤

[英]'The wait operation timed out' error when trying to connect to a database stored on another computer

我正在開發一個使用 SQL 服務器數據庫的 EF Core 項目,該數據庫是我在筆記本電腦上創建的,並希望從我的桌面訪問它。 我還沒有使用我的代碼訪問它 - 我只想手動連接到它,並且能夠在 SQL 服務器 Object 資源管理器中看到數據庫(在運行我的程序之前驗證我的桌面是否已連接到它)。

為了連接,我在筆記本電腦的配置管理器中啟用了 TCP/IP,並為防火牆添加了一條新規則以允許連接。 然后,當我在桌面上的 SSMS 中輸入筆記本電腦的名稱時,大約 30 秒后,它會拋出“等待操作超時”錯誤。

這是堆棧跟蹤:

at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager ) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 選項,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection DbGroupConnectionOptions userOptions)在系統 tem.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 重試,DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1 重試)在 System.Data.SqlClient.SqlConnection.TryOpen( TaskCompletionSource`1 retry) at System.Data.SqlClient.SqlConnection.Open() at Microsoft.SqlServer.Management.SqlStudio.Explorer.ObjectExplorerService.ValidateConnection(UIConnectionInfo ci, IServerType server) at Microsoft.SqlServer.Management .UI.ConnectionDlg.Connector.ConnectionThreadUser()

我對跨網絡連接計算機的經驗很少,只是剛剛學會了如何創建防火牆規則,所以我對問題可能是什么的猜測是有限的。 也許有更簡單的方法來訪問數據庫? 可能不是,從我所看到的,但如果有我會很高興知道!

提前感謝您提供的任何幫助。

這是一段真實的代碼。 我認為這對您的情況很有用。

public async Task<bool> CheckMsSqlConnection(string connectionString, int timeout = 8000)
{
    try
    {
        var dc = new MyDbContext(connectionString);
        var ctx = new CancellationTokenSource();
        ctx.CancelAfter(TimeSpan.FromMilliseconds(timeout));

        var db = dc.Database;
        db.CommandTimeout = 1;

        await db.Connection.OpenAsync(ctx.Token);

        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

暫無
暫無

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

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