Использование Quartz в среде ASP.NET MVC с использованием nhibernate arrow
-
24-10-2019 - |
Вопрос
У меня есть веб -сайт, работающий за норком, и я бы хотел использовать его для кварцевых работ.
Дело в том, что я хочу, чтобы они не делились ни одного состояния. Задача Quartz работает в каждом собственном потоке, в то время как структура MVC закрывает рабочее пространство в конце каждого запроса. В идеале, у MVC должен быть собственный сеанс, и у каждой работы должны быть собственный сеанс.
Каковы мои возможности здесь?
PS: Я очень новичок в Quartz, Burrow и MVC, поэтому я, вероятно, упускаю некоторые очень важные знания: |
Решение
Я попробовал простой наивный способ, который, по крайней мере, сейчас работает. Есть ли что -то принципиально неверное, что я здесь делаю? Будут ли эти переменные собирать мусор при выходе из резьбы?
public static class SessionManager
{
[ThreadStatic]
private static IDictionary<ISessionFactory, ISession> _sessions;
public static ISession GetSession(Type type)
{
var burrow = new BurrowFramework();
if (burrow.WorkSpaceIsReady)
{
return burrow.GetSession(type);
}
else
{
if (_sessions == null)
{
_sessions = new Dictionary<ISessionFactory, ISession>();
}
var factory = burrow.GetSessionFactory(type);
if (!_sessions.ContainsKey(factory))
{
_sessions[factory] = null;
}
var session = _sessions[factory];
if (session == null || !session.IsOpen)
{
session = _sessions[factory] = factory.OpenSession();
}
return session;
}
}
}