Laden...

Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)

Erstellt von davidG vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.019 Views
D
davidG Themenstarter:in
67 Beiträge seit 2006
vor 15 Jahren
Methodenaufruf funktioniert auf PC (Vista) allerdings nicht auf Server (Windows 2003)

.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

2.760 Beiträge seit 2006
vor 15 Jahren

Dann halte die Anwendung mal im Debugger an ("Pause") und schau im StackTrace wo deine Anwendung rumgammelt (irgendwo muss es ja hängen)

D
davidG Themenstarter:in
67 Beiträge seit 2006
vor 15 Jahren

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

G
497 Beiträge seit 2006
vor 15 Jahren

wäre es möglich, daß die Konfigurationseinstellungen deiner Anwendung (Properties.Settings.Default, Standard-Konfigurationseigenschaften des Projekts) auf dem Server nicht existieren?

D
davidG Themenstarter:in
67 Beiträge seit 2006
vor 15 Jahren

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

2.760 Beiträge seit 2006
vor 15 Jahren

Auf dem Server habe ich leider keinen Debugger

Hm... da gäbe es noch:

  • Mehr logging
  • Oder den debugger remote attachen.

[EDIT]
Evtl. bist du auch nur zu ungeduldig und läufst auf einen Timeout.

D
davidG Themenstarter:in
67 Beiträge seit 2006
vor 15 Jahren

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

K
142 Beiträge seit 2006
vor 15 Jahren

Hallo davidG,

werden denn die log-Einträge aus _timer_Elapsed erzeugt?

Grüße, Koller.

D
davidG Themenstarter:in
67 Beiträge seit 2006
vor 15 Jahren

ja,diese werden erzeugt

„Ich erfand den Begriff «objekt-orientiert», und ich kann sagen, dass ich dabei nicht C++ im Sinn hatte.“ Alan Kay

D
davidG Themenstarter:in
67 Beiträge seit 2006
vor 15 Jahren

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

K
142 Beiträge seit 2006
vor 15 Jahren

Hallo,

dann benenne die dll auf deinem PC um und schau, was beim Debuggen passiert.

Grüße, Koller.

X
1.177 Beiträge seit 2006
vor 15 Jahren

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.