我們有一個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'方法嗎? –