Я создал службу Windows, которая прослушивает порт (используя HttpListner) и принимает XML Repuest, и после того, как запрос действителен, он подключается к базе данных (обычно на том же компьютере), создает ответ xml и отправляет его обратно.
Пока все отлично, кроме тех случаев, когда служба принимает два или более запросов, требующих получения более 100 записей, происходит сбой.Сначала я использовал только одно общее соединение с базой данных, оно аварийно завершало работу, затем я переключился на несколько соединений, т. Е. Когда вам нужно что-то из базы данных создать ваше соединение.исключения, вот некоторые из исключений, которые я получил перед сбоем:
Произошла ошибка транспортного уровня при получении результатов с сервера.(поставщик: поставщик сеанса, ошибка: 19 - физическое соединение не используется)
Свойство ConnectionString не было инициализировано.
ExecuteReader требуетсяоткрытое и доступное соединение.Текущее состояние соединения - соединение.
ExecuteReader требует открытого и доступного соединения.Текущее состояние соединения открыто .
Недопустимая попытка вызова Read, когда устройство чтения закрыто.
Вот пример кода, который я использую:
Private Sub StartLisitng()
MyListener.Start()
Dim result As IAsyncResult
result = MyListener.BeginGetContext(New AsyncCallback(AddressOf ListnerCallback), MyListener)
End Sub
Private Sub ListnerCallback(ByVal result As IAsyncResult)
StartLisitng()
If result.IsCompleted Then
ctx = MyListener.EndGetContext(result)
Dim HandleRequestThread As New Thread(AddressOf New HandleRequest(ctx).RequestProcess)
HandleRequestThread.Start()
End If
End Sub
Public Function RemoteConnect(ByVal DNSBranch As String) As Boolean
Dim IsRemoteConnected As Boolean = False
RemoteConnString = "Data Source = " & DNSBranch & ";Initial Catalog=xxxxx;User ID=xxxxx;Password=xxxxx;Connect Timeout=5;MultipleActiveResultSets=True;"
RemoteConn = New SqlConnection(RemoteConnString)
Try
RemoteConn.Open()
Catch ex As Exception
IsRemoteConnected = False
End Try
If RemoteConn.State = 1 Then
IsRemoteConnected = True
Else
IsRemoteConnected = False
End If
Return IsRemoteConnected
End Function
Public Function RemoteExeComd(ByVal DNSBranch As String, ByVal query As String) As DataSet
Dim MyDataSet As New DataSet
RemoteConnect(DNSBranch)
Comd = New SqlCommand(query, RemoteConn)
Adapter = New SqlDataAdapter(Comd)
If query.StartsWith("Se") Or query.StartsWith("se") Or query.StartsWith("SE") Then
If RemoteConn.State = ConnectionState.Open Then
Try
Adapter.Fill(MyDataSet)
Catch ex As Exception
EventLog.WriteEntry("My Service", "Exception: " & ex.Message.ToString)
End Try
End If
Else
Try
Comd.ExecuteNonQuery()
Catch ex As Exception
EventLog.WriteEntry("My Service", "Exception: " & ex.Message.ToString)
End Try
End If
Comd.Dispose()
Adapter.Dispose()
Return MyDataSet
End Function
У меня нет проблем со списком или разбором запроса, я знаю, что у меня проблема с тем, как я взаимодействую с базой данных.
Любой совет, Спасибо за ваше время.