2016-04-19 3 views
0

Ich habe ein Timer-Ereignis erstellt versuchen, im Hintergrund von meinem Web-API zu laufen, fand ich es funktioniert gut, wenn ich Debugger auf lokalen Dev-Maschine. Der Timer funktioniert jedoch nicht, wenn ich sie zu IIS auf dem Server hinzugefügt habe. Es stoppt, nachdem die erste Web-Anfrage beendet ist (Ich habe es getestet, indem ich etwas Text in Log-Dateien geschrieben habe, es scheint nach ein paar Triggern gestoppt zu sein, sobald die Web-Anfrage abgeschlossen ist) Hier ist ein Beispiel-Code.Timer-Ereignis in Web-API

void refreshTimeStart() 
    { 
     refreshTimer = new System.Timers.Timer(Convert.ToInt32(ConfigurationManager.AppSettings["TIMER_INTERVAL"])); 
     refreshTimer.Elapsed += new ElapsedEventHandler(connectionResetEvent); 
     refreshTimer.AutoReset = true; 
     refreshTimer.Enabled = true; 
    } 
void connectionResetEvent(object source, ElapsedEventArgs e) 
    { 
     testIndex = testIndex + 1; 
     WriteToFile(testIndex); 
       } 
static void WriteToFile(int i) 
    { 
     string text = "This start trigged. "; 
     System.IO.File.WriteAllText(@"C:\Projects\abc" + i.ToString() + ".txt", text); 
    } 

Irgendeine Idee, wie man das erreicht? Danke vielmals.

Antwort

1

Die Frage wurde vor langer Zeit gestellt, aber hier ist eine Antwort auf jeden Fall.

Zunächst ist die Verwendung eines Timers in einer Web-API wahrscheinlich nicht die beste Idee. Ein Windows-Dienst wäre angemessener. Das heißt, Ihr Problem muss von zwei Problemen kommen:

  1. eine Web-API wartet auf eine Anfrage und initialisiert erst nach der ersten Anfrage. Sie müssen also eine Anfrage für den Start Ihres Timers einleiten.
  2. Die Standardeinstellungen von Anwendungspools in IIS haben eine Zeitüberschreitung. Selbst wenn Sie die Web-API initialisieren, wird der Anwendungspool nach Ablauf des Zeitlimits beendet. Sie können das Zeitlimit deaktivieren.