provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host
provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host
简而言之,我编写了一个控制台应用程序,它只调用 SQL 服务器数据库中的存储过程。然后设置 Windows 任务计划程序事件以每 5 分钟调用一次控制台应用程序的 .exe 文件。大部分时间它都有效,但是一天大约 10 次左右,一旦打开连接以调用存储过程,我们就会得到以下 sqlException:
System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server,
but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
我临时构建了一个 try 块,其中包含简单的 5 次重试和短暂的暂停,这对一些人有所帮助,但每天仍然有几次 5 次全部失败。我想这一定是某种沟通问题,但我什至不确定去哪里找。
我所做的大部分研究都指向 TLS 或防火墙问题。我不是这两个方面的专家,但我认为如果其中任何一个是导致它每次都会始终如一地出错的原因。对 SSL 的引用也是如此。另一方面,出于同样的原因,我看不出它可能是控制台应用程序或存储过程的编码问题,所以我没有想法。
SQL 连接代码如下所示:
Public Function GetDataTable(tsql As String, Optional ConnectionString As String = Nothing, Optional TryNum As Integer = 1) As DataTable
Try
Dim dt As DataTable
Using conn As SqlConnection = New SqlConnection(If(Not ConnectionString Is Nothing, ConnectionString, SConn))
conn.Open()
Using dr As SqlDataReader = (New SqlCommand With {.CommandType = CommandType.Text, .CommandText = tsql, .Connection = conn, .CommandTimeout = SqlCommandTimeout}).ExecuteReader
dt = New DataTable()
dt.Load(dr)
dr.Close()
End Using
conn.Close()
End Using
Return dt
Catch exSQL As System.Data.SqlClient.SqlException
If exSQL.ToString.Contains("A connection was successfully established with the server, but then an error occurred during the login process.") AndAlso TryNum < MaxTries Then
Threading.Thread.Sleep(RetryWaitMS)
Return GetDataTable(tsql, ConnectionString, TryNum + 1)
Else
SendMsg(ERROR_EMAIL_GROUP, ERROR_EMAIL_GROUP, "CommonUtils - SQL Error", tsql & vbCrLf & exSQL.ToString)
Throw exSQL
End If
End Try
End Function
请不要开始不使用 Parameters.AddWithValue 等和 SQL 注入。
我遇到了同样的问题,原因是:
“当 Windows 服务器 2012 R2 上的应用程序 运行 尝试连接到 SQL 服务器 运行 时,也会出现此问题19=] 服务器 2019."
简而言之,我编写了一个控制台应用程序,它只调用 SQL 服务器数据库中的存储过程。然后设置 Windows 任务计划程序事件以每 5 分钟调用一次控制台应用程序的 .exe 文件。大部分时间它都有效,但是一天大约 10 次左右,一旦打开连接以调用存储过程,我们就会得到以下 sqlException:
System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server,
but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
我临时构建了一个 try 块,其中包含简单的 5 次重试和短暂的暂停,这对一些人有所帮助,但每天仍然有几次 5 次全部失败。我想这一定是某种沟通问题,但我什至不确定去哪里找。
我所做的大部分研究都指向 TLS 或防火墙问题。我不是这两个方面的专家,但我认为如果其中任何一个是导致它每次都会始终如一地出错的原因。对 SSL 的引用也是如此。另一方面,出于同样的原因,我看不出它可能是控制台应用程序或存储过程的编码问题,所以我没有想法。
SQL 连接代码如下所示:
Public Function GetDataTable(tsql As String, Optional ConnectionString As String = Nothing, Optional TryNum As Integer = 1) As DataTable
Try
Dim dt As DataTable
Using conn As SqlConnection = New SqlConnection(If(Not ConnectionString Is Nothing, ConnectionString, SConn))
conn.Open()
Using dr As SqlDataReader = (New SqlCommand With {.CommandType = CommandType.Text, .CommandText = tsql, .Connection = conn, .CommandTimeout = SqlCommandTimeout}).ExecuteReader
dt = New DataTable()
dt.Load(dr)
dr.Close()
End Using
conn.Close()
End Using
Return dt
Catch exSQL As System.Data.SqlClient.SqlException
If exSQL.ToString.Contains("A connection was successfully established with the server, but then an error occurred during the login process.") AndAlso TryNum < MaxTries Then
Threading.Thread.Sleep(RetryWaitMS)
Return GetDataTable(tsql, ConnectionString, TryNum + 1)
Else
SendMsg(ERROR_EMAIL_GROUP, ERROR_EMAIL_GROUP, "CommonUtils - SQL Error", tsql & vbCrLf & exSQL.ToString)
Throw exSQL
End If
End Try
End Function
请不要开始不使用 Parameters.AddWithValue 等和 SQL 注入。
我遇到了同样的问题,原因是:
“当 Windows 服务器 2012 R2 上的应用程序 运行 尝试连接到 SQL 服务器 运行 时,也会出现此问题19=] 服务器 2019."