Windows-Dienst mit Timer
Habe ich einen windows-Dienst mit timer in c#.net. es funktioniert gut, während ich auf Debuggen/erstellen Sie das Projekt in visual studio, aber es funktioniert nicht führen Sie Ihren Betrieb nach der installation.
Dem, was vielleicht der Grund dafür ?
code :
public partial class Service1 : ServiceBase
{
FileStream fs;
StreamWriter m_streamWriter;
Timer tm = new Timer();
public Service1()
{
InitializeComponent();
this.ServiceName = "timerservice";
tm.Interval = 2000;
tm.Tick += new EventHandler(PerformOperations);
tm.Start();
fs = new FileStream(@"c:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
}
private void PerformOperations(object sener, EventArgs e)
{
//StreamWriter swr = new StreamWriter("c:\\test_from_database.txt",true);
try
{
OdbcConnection con = new OdbcConnection("DSN=liquor_data");
OdbcDataAdapter adp = new OdbcDataAdapter("", con);
DataSet ds = new DataSet();
string sql = "select * from item_group";
adp.SelectCommand.CommandText = sql;
adp.Fill(ds, "item_group");
foreach (DataRow dr in ds.Tables["item_group"].Rows)
{
// swr.Write(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");
//Console.WriteLine(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");
m_streamWriter.WriteLine(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");
}
m_streamWriter.Flush();
}
catch (Exception ex)
{
//swr.Write("Error :"+ ex.Message + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n"); }
}
}
}
InformationsquelleAutor der Frage Nitin Kabra | 2012-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten Ansatz mit der Windows-Dienst wird nicht einfach..
Vor langer Zeit, schrieb ich ein C# - Dienst.
Dies ist die Logik der Service-Klasse (getestet, funktioniert):
Ich empfehle Ihnen, schreiben Sie Ihre echte service-Arbeit in eine eigene statische Methode (warum nicht in einer Konsole-Anwendung...nur Verweis hinzufügen), um das Debuggen zu vereinfachen-und clean-service-code.
Stellen Sie sicher, der Abstand ist genug, und schreiben in log-NUR in OnStart und OnStop überschreibt.
Hoffe, das hilft!
InformationsquelleAutor der Antwort T-moty
Sie benötigen, um Ihre Haupt-code auf der
OnStart
Methode.Diesem anderen SO beantworten der mir helfen könnte.
Müssen Sie fügen Sie einige code, um das Debuggen in visual-studio während der Wartung Ihrer Anwendung gilt als ein windows-Dienst. Diese anderen SO thread decken Sie die Ausgabe von debugging-ein windows-Dienst.
BEARBEITEN:
Bitte beachten Sie hierzu auch die Dokumentation zur Verfügung hier für die
OnStart
- Methode in der MSDN, wo kann man dies Lesen:InformationsquelleAutor der Antwort Luis Quijada
Hier ist ein funktionierendes Beispiel, in dem der Ausführung der Dienstleistung begonnen wird in der OnTimedEvent der Timer, die implementiert ist als Delegierter in die ServiceBase-Klasse und der Timer-Logik ist gekapselt in einer Methode namens SetupProcessingTimer():
Dem Intervall definiert ist, die in app.config in Minuten:
InformationsquelleAutor der Antwort Uwe Köhler