Управление прослушивателем трассировки в приложении ASP.NET MVC - PullRequest
0 голосов
/ 13 декабря 2018

Я разработал множество компонентов (библиотеки классов) для перемещения данных между двумя базами данных.Они запланированы в кварцевую сетку.

Теперь мне нужен способ вызова компонента без ожидания планирования.Я начал разрабатывать приложение ASP.NET MVC для вызова компонента.Процесс тратит несколько минут, клиент мгновенно уведомляется с использованием технологии SignalR.

Каждый компонент записывает информацию журнала, используя объект трассировки.

Trace.WriteLine(message, typeLog.ToString());

Тип журнала enum (информация, предупреждение, ошибка)

Этот код вызывает компонент:

public JsonResult StartImport(string connectionId, string importerName)
{
     ImporterTraceListener myListener = new ImporterTraceListener(connectionId);
     new Importer.Run();
     myListener.Dispose();

     return Json("", JsonRequestBehavior.AllowGet);
}

public class ImporterTraceListener : TraceListener
{
    string _ConnectionId = string.Empty;

    public ImporterTraceListener(string connectionId)
    {
        _ConnectionId = connectionId;
        if (!Trace.Listeners.Contains(this))
        {
            Trace.Listeners.Add(this);
        }
    }

    public override void WriteLine(string message)
    {
        Send(message, string.Empty);
    }

    public override void WriteLine(object o, string category)
    {
        Send(o.ToString(), category);
    }

    public override void WriteLine(string message, string category)
    {
        Send(message, category);
    }

    public override void Write(object o)
    {
        Send(o.ToString(), string.Empty);
    }

    public override void Write(string message)
    {
        Send(message, string.Empty);
    }

    public void Send(string message, string category)
    {
        Utils.Functions.SendProgress(_ConnectionId, message, category);
    }
}

При первом запуске импорта он всегда работает нормально.Но при повторном запуске все журналы дублируются, третий раз утраивается и так далее.Кажется, что старый экземпляр ImporterTraceListener всегда жив, даже если dispose() был вызван до выхода из метода StartImport.

Как обеспечить постоянную работу одного экземпляра трассы?

...