我们有一个WCF web服务处理一些业务实体。 ORM是nhibernate 4.0.4,.NET 4.0。 我们使用的是IDispatchMessageInspector打开一个会话,并在AfterReceiveRequest交易,上下文类是wcf_operation:WCF和nHibernate并发问题
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
if (!CurrentSessionContext.HasBind(this.factory))
{
this.log.Log.Debug("Creating NH Session");
var session = this.factory.OpenSession();
session.FlushMode = FlushMode.Never;
session.BeginTransaction();
CurrentSessionContext.Bind(session);
}
return null;
}
的事务被提交,会话中BeforeSendReply关闭。 只要一次只有一个呼叫处理特定的实体,就可以工作。
如果两个并发Web服务尝试更新相同的实体,我得到一个NHibernate的异常
NHibernate.HibernateException:非法尝试集合有两个打开的会话
据我了解,联想两个更新在数据库级别发生冲突,我不明白这里有nhibernate的问题。 从我的理解来看,两次电话会议应该是相互独立的;我在这里错过了什么吗?一个配置可能?
如上所述,我看到数据库存在的问题;不过,我希望有一个例外声明关于concaturent更新的内容。 由于Web服务的流量增长,我担心我的会话处理存在一般性问题。
你能告诉我们'BeforeSendReply'方法吗? –