Использование Quartz в среде ASP.NET MVC с использованием nhibernate arrow

StackOverflow https://stackoverflow.com/questions/2996710

Вопрос

У меня есть веб -сайт, работающий за норком, и я бы хотел использовать его для кварцевых работ.

Дело в том, что я хочу, чтобы они не делились ни одного состояния. Задача 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;
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top