我可以为您提供翻译帮助,以下是您需要翻译的内容:
现在,在生产服务器上发生的情况是,它记录了
Windows事件查看器中也没有记录任何事件。此外,服务仍在运行(如果我在数据库中插入另一条记录,则立即由服务处理,因此服务也没有卡住。只是似乎无法处理
我对此感到困惑,如果有人能指出我犯的错误,那就太好了。哦,顺便说一下,我忘了提到这个服务几天前在服务器上完美地工作,而且仍然在我的本地电脑上正常工作。
编辑:
WriteLog:
我有一个 C# Windows 服务,用于执行各种任务。在我的本地系统上它运行得非常完美,但是当我在产品服务器上启动它时,它不能执行其中的一个特定任务。
这是我的服务结构:
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
}
}
现在,在生产服务器上发生的情况是,它记录了
RequestForEachCustomer
中的最后一条记录,即"RequestForEachCustomer - After Task",但它没有记录来自RequestProcessing
的条目,这意味着任务根本没有开始。在数据库或文本文件中没有任何异常。Windows事件查看器中也没有记录任何事件。此外,服务仍在运行(如果我在数据库中插入另一条记录,则立即由服务处理,因此服务也没有卡住。只是似乎无法处理
RequestProcessing
任务。)我对此感到困惑,如果有人能指出我犯的错误,那就太好了。哦,顺便说一下,我忘了提到这个服务几天前在服务器上完美地工作,而且仍然在我的本地电脑上正常工作。
编辑:
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;
}
}
我还在OnStop()
中记录了一条信息,类似于“服务已停止”,每次停止服务时都会记录日志,因此问题不可能存在于WriteLog
函数中。
await
它。这意味着除非你在委托内显式地捕获和记录异常(而你外部的广泛错误处理似乎暗示你不会这样做...),否则任务内抛出的任何异常都将无法被看到。实际的委托RequestProcessing
是什么样子的? - Tomas AschanobjTask.ContinueWith(t => /* log t.Exception */, TaskContinuationOptions.OnlyOnFaulted)
来记录实际的异常信息。 - JanDotNet