3

私は NHibernate を使用した ASP.NET アプリケーションを持っています。何らかの理由で、一部のページ (20 ページなど) でセッションを閉じるのを忘れた開発者はほとんどいません。最善の解決策は、各ページを調べて、セッションが適切に閉じられていることを確認することです。 、しかし、コードはすでに生産されているため、そのような動きはできません。そのため、セッション ファクトリで開いているすべてのセッションを取得し、マスター ページまたは追加のプロセスを使用してセッションを閉じる方法を見つけようとしていましたが、それを行う方法が見つかりません。

では、開いているすべてのセッションを取得する方法はありますか? または、セッションのアイドルタイムアウトなどを設定するかもしれませんが、何を提案しますか?. アドバイスありがとう。

4

1 に答える 1

2

私の知る限り、セッション ファクトリから開いているセッションのリストを取得するためのサポートはありません。開いているセッションを監視する独自の方法があり、次の構造を使用します。

ISession への弱参照を持つクラスを作成します。この方法では、セッションがガベージ コレクションされている場合にガベージ コレクターを中断しません。

public class SessionInfo
{
    private readonly WeakReference _session;

    public SessionInfo(ISession session)
    {
        _session = new WeakReference(session);
    }

    public ISession Session
    {
        get { return (ISession)_session.Target; }
    }
}

開いているセッションを保存するためのリストを作成します。

List<SessionInfo> OpenSessions = new List<SessionInfo>();

DAL(データアクセス層)には、次のメソッドがあります。

public ISession GetNewSession()
{
    if (_sessionFactory == null)
        _sessionFactory = createSessionFactory();      
    ISession session = _sessionFactory.OpenSession();
    OpenSessions.Add(new SessionInfo(session));
    return session;
}

このようにして、必要なときに照会できるオープン セッションのリストを維持します。おそらくこれはあなたのニーズを満たしていますか?

于 2011-11-22T12:24:53.177 に答える