Я разработал множество компонентов (библиотеки классов) для перемещения данных между двумя базами данных.Они запланированы в кварцевую сетку.
Теперь мне нужен способ вызова компонента без ожидания планирования.Я начал разрабатывать приложение 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
.
Как обеспечить постоянную работу одного экземпляра трассы?