Issue writing to single file in Web service in .NET

前端 未结 11 1846
天涯浪人
天涯浪人 2020-12-10 17:37

I have created a webservice in .net 2.0, C#. I need to log some information to a file whenever different methods are called by the web service clients.

The problem

11条回答
  •  醉酒成梦
    2020-12-10 17:56

    To know what I am trying to do in my code, following is the singletone class I have implemented in C#

    public sealed class FileWriteTest {

    private static volatile FileWriteTest instance;
    
    private static object syncRoot = new Object();
    
    private static Queue logMessages = new Queue();
    
    private static ErrorLogger oNetLogger = new ErrorLogger();
    
    private FileWriteTest() { }
    
    public static FileWriteTest Instance
    {
        get
        {
            if (instance == null)
            {
                lock (syncRoot)
                {
                    if (instance == null)
                    {
                        instance = new FileWriteTest();
                        Thread MyThread = new Thread(new ThreadStart(StartCollectingLogs));
                        MyThread.Start();
    
                    }
                }
            }
    
            return instance;
        }
    }
    
    private static void StartCollectingLogs()
    {
    
        //Infinite loop
        while (true)
        {
            cdoLogMessage objMessage = new cdoLogMessage();
            if (logMessages.Count != 0)
            {
                objMessage = (cdoLogMessage)logMessages.Dequeue();
                oNetLogger.WriteLog(objMessage.LogText, objMessage.SeverityLevel);
    
            }
        }
    }
    
    public void WriteLog(string logText, SeverityLevel errorSeverity)
    {
        cdoLogMessage objMessage = new cdoLogMessage();
        objMessage.LogText = logText;
        objMessage.SeverityLevel = errorSeverity;
        logMessages.Enqueue(objMessage);
    
    }
    

    }

    When I run this code in debug mode (simulates just one user access), I get the error "stack overflow" at the line where queue is dequeued.

    Note: In the above code ErrorLogger is a class that has code to write to the File. objMessage is an entity class to carry the log message.

提交回复
热议问题