Windows サービス内で単純な WCF サービスをホストしています。WCF サービス自体は、インストルメンテーション データを記録する TextWriterTraceListener を作成します。
奇妙なことは、Windows サービスが再起動していないにもかかわらず、新しいログ ファイルを作成し続けているようで、同じログ エントリを複数のファイルに書き込んでいることです。
上記の動作は、基本的にクライアントがサービスに接続するたびに、 MyService のコンストラクターが複数回起動されている場合にのみ発生する可能性があります。私の理解と希望は、MyServiceBase のインスタンスを 1 つだけ作成し、したがって MyService のインスタンスを 1 つだけ作成することです (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"));
}