2016-05-26 13 views
0

Ich habe eine asp.net mvc-Anwendung erstellt, die alle 10 Minuten die von bestimmten Benutzern generierten Tweets liest. Ich mache diese Aufgabe durch einen Timer. Der Timer läuft perfekt zwischen 2 und 5 mal und dann stoppt der Timer ohne eine Ausnahme oder einen Fehler.Warum stoppt mein asp.net mvc timer?

Weiß jemand, warum das passiert und wie kann ich einstellen, dass es immer läuft bis ich den Timer stoppe ???

Hier wird der Timer-Konfiguration und der Timer Handler:

Public Shared Function Start() 
    Dim db As New EnubexDbContext 
    Dim provider As CultureInfo = CultureInfo.InvariantCulture 
    Dim tiempo As Double = Convert.ToDouble(db.ParametrosGenerales.Where(Function(pg) pg.sDescripcionParametroGeneral = "frecuenciaSeekerTwitterTimer").Select(Function(pg) pg.sValorParametroGeneral).FirstOrDefault()) 
    If Not IsNothing(tiempo) Then 
     timer = New Timer(tiempo) 
     If Not IsNothing(timer) Then 
      ApplicationLog.EscribirActividad("Se creo el objeto timer") 
     End If 
     Try 
      AddHandler timer.Elapsed, New ElapsedEventHandler(AddressOf Handler) 
      ApplicationLog.EscribirActividad("Se agregó el handler") 
      timer.Enabled = True 
      If Not IsNothing(timer) Then 
       ApplicationLog.EscribirActividad("Se activó el timer") 
      End If 
      Return (0) 
     Catch ex As Exception 
      ApplicationLog.EscribirExcepctionLog(ex) 
      Return (1) 
     End Try 
    Else 
     Return (1) 
    End If 
End Function 

Shared Async Sub Handler(ByVal sender As Object, ByVal e As ElapsedEventArgs) 
    ApplicationLog.EscribirActividad("Empezando búsqueda") 
    Try 
     Await SeekTwitter() 
     ApplicationLog.EscribirActividad("Terminando búsqueda") 
    Catch ex As Exception 
     ApplicationLog.EscribirExcepctionLog(ex) 
    End Try 
End Sub 
+1

Dies ist wahrscheinlich, weil der AppPool recycling ist, den Timer zu zerstören. Wo wird 'Start()' aufgerufen? –

+3

Führen Sie in ASP.NET keinen Hintergrundprozess selbst aus. Du wirst vermasseln. Scott Hanselman diskutiert das auf seinem Blog [hier] (http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx). – mason

Antwort

2

dieses Recht zu tun, ist nicht einfach. Glücklicherweise hat ein verrückter, cleverer Entwickler den schwierigen Teil für dich erledigt.

Werfen Sie einen Blick auf Hangfire Es ermöglicht Ihnen, Aufgaben auf einen Zeitplan in einer Asp.net-App sicher zu planen.

+0

Hallo, danke für deine Antwort. Ich versuche Hangfire in meinem Projekt, mit dieser Codezeile, um einen wiederkehrenden Job zu erstellen -> RecurringJob.AddOrUpdate (Of SeekerTwitterTimer) (Function() SeekerTwitterTimer.SeekTwitter, "*/15 * * * *") aber ich führe die Anwendung bekomme ich den folgenden Fehler: "Ausdruck Körper sollte vom Typ' MethodCallExpression' sein Parametername: methodCall ". Hast du eine Idee, was passiert? – Henry

+0

@Henry Vielleicht versuchen Sie diese RecurringJob.AddOrUpdate (() => SeekerTwitterTimer.SeekTwitter(), "*/15 * * * *"); – etoisarobot

+0

Der Code, den ich gemacht habe, ist in VB.NET-Syntax, Ihr Code ist C# -Syntax – Henry