Ich habe einen C# Windows-Dienst, der verschiedene Aufgaben ausführt. Es funktioniert perfekt auf meinem lokalen System, aber sobald ich es auf meinem Produktserver starte, führt es keine bestimmte Aufgabe auf ihm aus. DieseSystem.Threading.Task nicht in der Produktionsumgebung
ist, wie mein Service strukturiert:
public static void Execute()
{
try
{
// .... some work ....
foreach (DataRow dr in dt.Rows)
{
string cc = dr["ccode"].ToString();
Task objTask = new Task(delegate { RequestForEachCustomer(cc); });
objTask.Start();
}
}
catch (Exception ex)
{
// Logging in DB + Text File
}
}
public static void RequestForEachCustomer(object cc)
{
try
{
// .... some work ....
foreach (DataRow dr in dt.Rows)
{
WriteLog("RequestForEachCustomer - Before Task");
Task objTask = new Task(delegate { RequestProcessing(dr); });
objTask.Start();
WriteLog("RequestForEachCustomer - After Task");
}
}
catch (Exception ex)
{
// Logging in DB + Text File
}
}
public static void RequestProcessing(object dr)
{
try
{
WriteLog("Inside RequestProcessing");
// .... some work ....
}
catch (Exception ex)
{
// Logging in DB + Text File
}
}
Nun, was auf dem Produktionsserver passiert, ist, dass es der letzte Eintrag in RequestForEachCustomer
protokolliert die „RequestForEachCustomer - Nach Aufgabe“ ist aber es funktioniert nicht Logge den Eintrag von RequestProcessing
ein, was bedeutet, dass die Aufgabe überhaupt nicht startet. Es gibt keine Ausnahmen in Datenbank oder Textdatei.
In der Ereignisanzeige des Fensters sind keine Ereignisse protokolliert. Auch der Dienst funktioniert weiter (wenn ich einen anderen Datensatz in die Datenbank einfüge, wird er sofort vom Dienst verarbeitet, so dass der Dienst auch nicht feststeckt. Er scheint RequestProcessing
Aufgabe nicht zu verarbeiten.)
Ich bin davon verwirrt und es wäre großartig, wenn jemand auf den Fehler hinweisen könnte, den ich mache. Ach, übrigens habe ich vergessen zu erwähnen, dass dieser Dienst vor ein paar Tagen perfekt auf dem Server funktionierte und auf meinem lokalen PC immer noch gut funktioniert.
EDIT:
WriteLog:
public static void WriteErrorLog(string Message)
{
StreamWriter sw = null;
try
{
lock (locker)
{
sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\LogFile.txt", true);
sw.WriteLine(DateTime.Now.ToString() + ": " + Message);
sw.Flush();
sw.Close();
}
}
catch (Exception excep)
{
try
{
// .... Inserting ErrorLog in DB ....
}
catch
{
throw excep;
}
throw excep;
}
}
Ich habe auch ein Eintrag auf OnStop()
so etwas wie "Service Stopped" und seine Protokolle jedes Mal protokolliert ich meinen Dienst zu beenden, um das Problem nicht in existieren könnte WriteLog
Funktion.
Es würde vorschlagen (von der Snippets), dass dt.Rows leer ist - daher kein Protokoll. – BugFinder
Was ist 'WriteLog()'? Vielleicht ist es nicht threadsicher. – Sinatr
Nein. Ich kann dir versichern, dass dt.Rows nicht leer ist. – NewbieProgrammer