2016-05-29 8 views
0

Ich habe diesen Code:Wie Web-Service mit Intervall von fünf Minuten aufrufen?

class ServiceConsumer 
{ 
    static void Main(string[] args) 
    { 
     //call from here retriveEvents method evry 5 minutes! 
    } 


    private static void retriveEvents() 
    { 

     IContract proxy = ChannelFactory<IContract>.CreateChannel(new BasicHttpBinding(), 
             new EndpointAddress("http://someAddress/Hydrant.svc")); 

     using (proxy as IDisposable) 
     { 
      var rows = proxy.GetData(new DateTime(2000, 5, 1)); 
     } 
    } 
} 

Die retriveEvents() Methode wird Proxy Erstellen und Abrufen von Daten von der Host-Dienst. Wie kann ich asyncroniusly retriveEvents() -Methode aufrufen, um auf den Host-Service alle 5 Minuten zuzugreifen?

+1

einen Timer (Zecke) verwenden? – Odrai

+0

Diese Antwort sollte für Sie funktionieren: http://stackoverflow.com/a/21590665/2290059. Vergessen Sie nicht, vom Hauptthread zu warten, indem Sie 'Console.ReadLine();' zum Beispiel aufrufen. –

+0

@YacoubMassad, kann ich while-Schleife anstelle von Console.ReadLine(); ? – Michael

Antwort

0
static void Main(string[] args) 
{ 
    System.Timers.Timer aTimer = new System.Timers.Timer(); 
    aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent); 
    aTimer.Interval=360000; 
    aTimer.Enabled=true; 

    while(true) { } 
} 

private static void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    // Do your stuff 
    retriveEvents(); 
} 
+0

Ich habe es versucht. Es geht, warf alle Zeilen in Hauptfunktion, aber es feuert nie OnTimedEvent Methode – Michael

+0

Ich würde 'System.Timer.Timer' anstelle von' System.Threading.Timer' verwenden, weil es threadsafe out of the box ist. –

+0

@Michael hast du eine while (true) loop hinzugefügt? denn sonst stoppst du das Programm vor dem Aufruf der 'retriveEvents' –

0
var timer = new System.Threading.Timer((e) => 
{ 
    MyMethod(); 
}, null, 0, TimeSpan.FromMinutes(5).TotalMilliseconds); 
Verwandte Themen