我在 Windows 服务中托管了一个简单的 WCF 服务。WCF 服务本身会创建 TextWriterTraceListener,它将检测数据记录到其中。
奇怪的是,即使 windows 服务没有重新启动,它似乎还在不断创建新的日志文件,并且正在将相同的日志条目写入多个文件。
上述行为只有在 MyService 的构造函数被多次触发时才会发生,基本上是每次客户端连接到服务时。我的不理解和希望是它只会创建一个 MyServiceBase 实例,因此只创建一个 MyService 实例(每次 Windows 服务启动时)。
当然,我可以解决这个问题并检查有多少听众被添加到 Trace,但我想了解发生了什么。
代码如下:
var ServicesToRun = new ServiceBase[]
{
new MyServiceBase()
};
ServiceBase.Run(ServicesToRun);
public partial class MyServiceBase : ServiceBase
{
ServiceHost _serviceHost;
public MyServiceBase()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_serviceHost = new ServiceHost(typeof(MyService));
_serviceHost.Open();
}
protected override void OnStop()
{
if (_serviceHost != null)
{
_serviceHost.Close();
}
_serviceHost = null;
}
}
public MyService()
{
_fileListner = new TextWriterTraceListener(string.Format(@"{0}\Trace{1}.log", logDir, DateTime.Now.Ticks));
Trace.Listeners.Add(_fileListner);
WriteTraceMessage(string.Format("Service started {0}", DateTime.Now), new Guid("71961817-CB62-410f-AB44-43BFCE246847"));
}