.Net Framework 2.0
Visual Studio 2008
PC - Windows Vista
Server - Windows 2003
Hallo,
ich habe folgendes Problem:
Ich habe einen Timer. Wenn dieser Timer auslöst, dann soll eine Methode aufgerufen werden, die Daten in eine Datenbank einträgt. Auf meinem Entwicklungs-PC funktioniert das alles wunderbar. Kopiere ich die .exe Datei auf meinen Windowsserver, auf dem die Anwendungen laufen soll, funktioniert der aufruf der Methode nicht. Es wird auch keine Fehlermeldung ausgespuckt, es passiert einfach gar nichts. So als hätte ich einen Breakpoint gesetzt.
Hier ist der Timer-Event-Code:
void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (_log.IsInfoEnabled)
{
_log.Info("Timer Elapsed");
}
_timer.Stop();
if (_log.IsInfoEnabled)
{
_log.Info("Before InsertResultSet " + InputWordList.Count.ToString());
}
InsertResultSet();
}
Hier ist der Code, der Methode "InsertResultSet":
private void InsertResultSet()
{
if (_log.IsInfoEnabled)
{
_log.Info("Start Insert Pop Up");
}
if (!InProcess)
{
try
{
InProcess = true;
using(FbConnection fbCon = new FbConnection(Properties.Settings.Default.ConnectionPopUp))
using(FbCommand fbCmd = new FbCommand("INSERT INTO tblInputWords (wordID, quantity, sourceID, point)"+
"VALUES (@wordID,@count,@sourceID, @point)"))
{
fbCon.Open();
FbTransaction fbTra = fbCon.BeginTransaction();
fbCmd.Connection = fbCon;
fbCmd.Transaction = fbTra;
try
{
for(int index = 0; index < InputWordList.Count;)
{
fbCmd.Parameters.AddWithValue("@wordID", InputWordList[index].WordId);
fbCmd.Parameters.AddWithValue("@count", InputWordList[index].Count);
fbCmd.Parameters.AddWithValue("@sourceID", InputWordList[index].SourceID);
fbCmd.Parameters.AddWithValue("@point", InputWordList[index].TimeStamp);
fbCmd.ExecuteNonQuery();
fbCmd.Parameters.Clear();
InputWordList.RemoveAt(index);
}
fbTra.Commit();
}
catch(Exception ex)
{
_log.Fatal(ex.Message + " - " + ex.StackTrace);
}
finally
{
fbTra.Dispose();
fbCon.Close();
}
}
}
catch (Exception ex)
{
_log.Fatal(ex.Message + " - " + ex.StackTrace);
}
finally
{
InProcess = false;
_timer.Start();
}
}
else
{
_timer.Start();
}
}
Wie gesagt, funktioniert der Aufrauf der Methode auf meinem PC ohne Probleme. Auf meinem Server funktioniert das ganze nicht mehr. Alle anderen Funktionalitäten des Programmes funktionieren auf dem Server ohne Probleme. Hat jemand Ideen, an was das liegen könnte?
Vielen Dank
Grüße
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
Dann halte die Anwendung mal im Debugger an ("Pause") und schau im StackTrace wo deine Anwendung rumgammelt (irgendwo muss es ja hängen)
Auf dem Server habe ich leider keinen Debugger
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
wäre es möglich, daß die Konfigurationseinstellungen deiner Anwendung (Properties.Settings.Default, Standard-Konfigurationseigenschaften des Projekts) auf dem Server nicht existieren?
was meinst du mit Standard-Konfigurationseigenschaften? steh grad auf dem schlauch.
meinst du damit die settings, die in der app.exe.config drinnen sind? die datei ist auf dem server und auch angepasst.
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
Auf dem Server habe ich leider keinen Debugger
Hm... da gäbe es noch:
[EDIT]
Evtl. bist du auch nur zu ungeduldig und läufst auf einen Timeout.
mhh...
es sollte ja als erstes in der methode was ins log-file geschrieben werden:
private void InsertResultSet()
{
if (_log.IsInfoEnabled)
{
_log.Info("Start Insert Pop Up");
}
...
aber im log-file wird eben dieser eintrag nicht geschrieben. und die if bedingung ist auch wahr.
ich glaube ich versuche mich mal mit remote debugging zu beschäftigen
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
Hallo davidG,
werden denn die log-Einträge aus _timer_Elapsed erzeugt?
Grüße, Koller.
ja,diese werden erzeugt
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
ich habs. Ich hatte vergessen die FirebirdSql.Data.FirebirdClient.dll mit auf den Server zu kopieren. Jetzt funktioniert es.
Was ich aber nicht ganz verstehe, warum nichts ins Log File geschrieben wurde, weil der Befehl fürs logging ja vor den Firebird-Befehlen kommt.
„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay
Hallo,
dann benenne die dll auf deinem PC um und schau, was beim Debuggen passiert.
Grüße, Koller.
und eifrig remote debuggen, System.Diagnostics.Debug mit z.B. DebugView verwenden und das Eventlog am Server nicht vergessen...
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.