1
我有一个Windows服务,覆盖OnStart和OnStop方法来调用类库。我正在使用生产者/消费者模型(请参阅http://www.albahari.com/threading/part4.aspx#_Wait_Pulse_Producer_Consumer_Queue,了解我的想法/逻辑)。Windows服务不调用类库
我遇到的问题是由于某种原因,操作不正确运行。这里的“(系统)行动”代码(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...");
}
但日志条目永远不会被写入(该方法在其他地方工作正常)。
最怪异的部分是当我用控制台应用程序封装类时,它工作正常。该代码在Windows服务中完全相同,但它不会触发BuildFile。
有没有人看过类似的东西?
控制台应用程序和服务应用程序很可能在不同的帐户下运行。确保服务帐户有权访问文件系统路径。另外,如果您正在使用Windows身份验证数据库,则还需要查看该数据库。 – 2012-02-24 19:16:25
那么,我要做的第一件事就是将匿名方法重构为普通方法,以便您可以对其执行一些调试。如果我冒险猜测,我会说你的'file'变量在它有机会写入该日志条目之前超出了范围。 – 2012-02-24 19:18:20
@Boo你可以把你的评论放入一个答案,工作(加上我的项目特别的几个其他步骤)。我想将其标记为已回答并获得您的信任!谢谢你的帮忙。 3天“浪费”在这。 – SlackerCoder 2012-02-27 19:56:55