Hallo zusammen.
Ich schreibe einen Service. In der Start-Prozedur erzeuge ich einen Timer:
[highlight=vbnet]
Dim oCallBackPersons As New TimerCallback(AddressOf TimedEventPersons)
Dim oTimerPersons As New System.Threading.Timer(oCallBackPersons, Nothing, 1000, 10000) [/highlight]
Dieser sollte eine Sekunde nach Start des Service starten und dann alle 10 Sekunden wiederholt werden. Da klappt aber soweit ganz gut.
ABER: In diesem Timer rufe ich eine Prozedur auf. Diese läuft bis zum Ende erfolgreich durch. Aber irgendwas in der Prozedur führt dazu, dass der Timmer sich nicht wiederholt. Der Service stürzt nicht ab oder so (das würde ich in log.dateien sehen da ich alles mit Exceptions abfange).
Nun habe ich folgendes gemacht: ich habe die ganze Prozedur auskommentiert und jede zeile von oben beginnen wieder ein kommentiert und geschaut bis wo sich der Timer immer brav wiederholt.
Hier erstmal der Code des Timers:
[highlight=vbnet]
Sub TimedEventPersons()
Try
WriteLog("ExportPersons: Start")
Call ExportPersons()
Catch ex As Exception
WriteLog(ex.Message)
End Try
End Sub
[/highlight]
So, ich poste jetzt den Code der Prozedur bis zu der Zeile wo offensichtlich ein Fehler passiert:
[highlight=vbnet]
Public Sub ExportPersons()
Dim querystring As String = ""
Dim connectionString As String = GetConnectionString()
WriteLog(connectionString)
Try
Using connection As New SqlConnection
If SQLIntegratedSecurity = True Then
WriteLog("Öffne Connection zu Server: " & SQLServer & " Instanz: " & SQLInstanz & " mit Windows Authentifizierung")
Else
WriteLog("Öffne Connection zu Server: " & SQLServer & " Instanz: " & SQLInstanz & _
" mit SQL-User: " & SQLUser)
End If
connection.ConnectionString = connectionString
connection.Open()
querystring = "SELECT p.* FROM Tabelle1 p"
Dim daResult As SqlDataAdapter = New SqlDataAdapter(querystring, connection)
Dim dsResult As DataSet = New DataSet
daResult.Fill(dsResult, "Tabelle1")
[/highlight]
Solange die Zeile "Dim dsResult As DataSet = New DataSet
daResult.Fill(dsResult, "hPerson")" auskommentiert ist läuft der Timer alle 10 Sekunden. Sobald ich diese einkommentiere läuft er einmal durch und macht dann nichts mehr bis ich den Service beende.
In der OnStop Prozedur schreibe ich wieder was in ein Log. Das klappt wunderbar. Daher nehme ich an dass der Service nicht abstürzt. Ich habe aber auch keine Ahnung was da los sein kann! Ich bin echt hilflos!
Habt ihr eine Idee?
LG
Michael
Ich schreibe einen Service. In der Start-Prozedur erzeuge ich einen Timer:
[highlight=vbnet]
Dim oCallBackPersons As New TimerCallback(AddressOf TimedEventPersons)
Dim oTimerPersons As New System.Threading.Timer(oCallBackPersons, Nothing, 1000, 10000) [/highlight]
Dieser sollte eine Sekunde nach Start des Service starten und dann alle 10 Sekunden wiederholt werden. Da klappt aber soweit ganz gut.
ABER: In diesem Timer rufe ich eine Prozedur auf. Diese läuft bis zum Ende erfolgreich durch. Aber irgendwas in der Prozedur führt dazu, dass der Timmer sich nicht wiederholt. Der Service stürzt nicht ab oder so (das würde ich in log.dateien sehen da ich alles mit Exceptions abfange).
Nun habe ich folgendes gemacht: ich habe die ganze Prozedur auskommentiert und jede zeile von oben beginnen wieder ein kommentiert und geschaut bis wo sich der Timer immer brav wiederholt.
Hier erstmal der Code des Timers:
[highlight=vbnet]
Sub TimedEventPersons()
Try
WriteLog("ExportPersons: Start")
Call ExportPersons()
Catch ex As Exception
WriteLog(ex.Message)
End Try
End Sub
[/highlight]
So, ich poste jetzt den Code der Prozedur bis zu der Zeile wo offensichtlich ein Fehler passiert:
[highlight=vbnet]
Public Sub ExportPersons()
Dim querystring As String = ""
Dim connectionString As String = GetConnectionString()
WriteLog(connectionString)
Try
Using connection As New SqlConnection
If SQLIntegratedSecurity = True Then
WriteLog("Öffne Connection zu Server: " & SQLServer & " Instanz: " & SQLInstanz & " mit Windows Authentifizierung")
Else
WriteLog("Öffne Connection zu Server: " & SQLServer & " Instanz: " & SQLInstanz & _
" mit SQL-User: " & SQLUser)
End If
connection.ConnectionString = connectionString
connection.Open()
querystring = "SELECT p.* FROM Tabelle1 p"
Dim daResult As SqlDataAdapter = New SqlDataAdapter(querystring, connection)
Dim dsResult As DataSet = New DataSet
daResult.Fill(dsResult, "Tabelle1")
[/highlight]
Solange die Zeile "Dim dsResult As DataSet = New DataSet
daResult.Fill(dsResult, "hPerson")" auskommentiert ist läuft der Timer alle 10 Sekunden. Sobald ich diese einkommentiere läuft er einmal durch und macht dann nichts mehr bis ich den Service beende.
In der OnStop Prozedur schreibe ich wieder was in ein Log. Das klappt wunderbar. Daher nehme ich an dass der Service nicht abstürzt. Ich habe aber auch keine Ahnung was da los sein kann! Ich bin echt hilflos!
Habt ihr eine Idee?
LG
Michael
Comment