ASP.NET外部客户端服务器环境中的会话生存期

时间:2011-08-02 06:01:44

标签: nhibernate ninject

我们非常依赖Ninject的注射机制。目前,我们正在努力处理会话。我们阅读了很多关于会话管理的内容,我们希望实现每个业务转换的会话。我们有一个简单的基础设施,如下所示:

public class Repository<TEntity> : IRepository<TEntity>
    where TEntity : class, IEntity
{
    public Repository(ISession session)
    {
        this.Session = session;
    }

    protected ISession Session { get; private set; }

    public TEntity FindBy(Guid key)
    {
        return this.Session.Get<TEntity>(key);
    }
    /// rest omitted
}

回购的消费者如下所示:

    public class Consumer {
            public Consumer (Repository<SomeEntity> repo, ISession session)
            public void DoSomeWork() {
                    using (var tx = session.BeginTransaction()) {
                       repo.FindBy(someId);
                       /// etc.
                       tx.Commit();
            }
    }

Repo实例中注入的ISession保证与消费者中的ISession相同。我们正在构建一个小型服务器应用程序,它在内部托管几个基础结构服务,这些服务具有服务器进程的生命周期和一些WCF端点当我们控制铣床时,基础设施服务主要用于控制“软件”机器及其状​​态机的创建和正确处理。

我们正在考虑以下会话管理结构:

  • 基础设施服务:每次服务会话
  • WCF端点:每个OperationContext的会话
  • 其他组成部分:?

对于某些情况,WCF端点需要挂钩到基础结构服务。你会如何处理那里的会议?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果您使用每个服务端点的会话,那么该服务的所有使用者将使用相同的会话。这是不可取的。
我个人会按照每个请求进行会话,因为它更容易使用和实现,而你的问题并没有说明使用其他任何东西的任何理由。
有关详细信息,请参阅this