Я настраиваю слушателя для уведомления от postresql через npgsql в vb.net.Подпрограмма просто открывает новое ssl-соединение и запускает новый поток с циклом, ожидающим уведомления.Ниже приведен код
Public Sub StartListening()
If mConnString Is Nothing Then
Main_Form.WriteMessage("Not connected")
End If
Try
connection = New NpgsqlConnection(mConnString) With {
.ProvideClientCertificatesCallback = New ProvideClientCertificatesCallback(AddressOf MyProvideClientCertificates)
}
connection.Open()
If connection.State = ConnectionState.Open Then
Using command = New NpgsqlCommand("listen my_notification", connection)
command.ExecuteNonQuery()
End Using
End If
AddHandler connection.Notification, New NotificationEventHandler(AddressOf OnNotification)
Dim thread As New Thread(
Sub()
While True
connection.Wait()
End While
End Sub
)
thread.Start()
Catch ex As Exception
Main_Form.WriteMessage("Error:" + ex.Message)
End Try
End Sub
Private Sub MyProvideClientCertificates(ByVal clienteCertis As X509CertificateCollection)
Dim cert As X509Certificate2 = New X509Certificate2("mycertificate.pfx")
clienteCertis.Add(cert)
End Sub
Все работало нормально, пока я не установил SSL-соединение: оно не работает на connection.Wait () говоря
Wait () с тайм-аутом не поддерживается при использовании SSL, см. https://github.com/npgsql/npgsql/issues/1501
Поскольку на самом деле тайм-аут мне не нужен, я попытался установить timeout = 0 и commandtimeout = 0 в строке подключения, но ошибка все еще остается, и это то, что я вижу в трассировке стека ошибок
в Npgsql.NpgsqlConnector.Wait (Int32 timeout)
в Npgsql.NpgsqlConnection.Wait (Int32 timeout)
в Npgsql.NpgsqlConnection.Wait ()
Может кто-нибудь помочь?