我有一个Windows服务覆盖OnStart和OnStop方法来调用类库。我正在使用生产者/消费者模型(请参阅http://www.albahari.com/threading/part4.aspx#_Wait_Pulse_Producer_Consumer_Queue了解我的想法/逻辑)。
我遇到的问题是由于某种原因,Action未正确运行。这是“(系统。)动作”代码(在timer_elapsed中):
_queue.EnqueueItem(() =>
{
BuildFile file = new BuildFile();
file.run();
_writer.WriteLine("Gets Here: {0}", DateTime.Now.ToString());
_writer.Flush();
});
正如您可能看到的那样,_writer基本上是一个“调试”日志记录工具。每当调用它时,它都会将该行写入文件(Windows服务运行计时器):
_timer.Interval = 30000; //(3600000)
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
_timer.Enabled = true;
对于测试,对BuildFile
进行的第一次调用是对数据库的简单记录:
public BuildFile()
{
logEntry("Success", "I'm Running...");
}
但是日志条目永远不会被写入(该方法在其他地方工作正常)。
最奇怪的部分是当我用Console应用程序包装类时,它工作正常。 Windows服务中的代码完全相同,但它不会触发BuildFile。
有没有人见过这样的东西?
答案 0 :(得分:1)
控制台应用和服务应用最有可能在不同的帐户下运行。确保服务帐户有权访问文件系统路径。此外,如果您对数据库使用Windows身份验证,则还需要查看它。