我有一個相對簡單的問題,我不能解決沒有很多醜陋的解決方法。基本上,我正在開發支付網關客戶端,其過程是網站通知付款服務器要完成的付款,客戶端轉移到付款服務器,並且一旦付款完成,付款服務器通知網站一個單獨的線程付款已完成,並重定向客戶。現在,在收到付款通知之前,客戶可以在網站上「收到」。因此,我需要對系統進行編程,以等待直到收到通知或最多30秒。等待項目被標記爲由不同的線程支付,使用nhibernate
收到通知後,Order
實體標記爲「付費」。問題是這樣的:
- 客戶端被重定向到網站之前,
Order.Paid
仍然false
- 1後 - 5秒,接收通知和
Order
被標記爲true
- 由於NHibernate的會話管理,客戶端在另一個線程上仍然看到
Order.Paid
爲false
。 - 更糟的是,有時客戶的
Order
然後刷新End_Request
,並且Order.Paid
再次重置爲false
。
我試過的唯一辦法似乎有效,就是我在等待之前明確地處理了Nhibernate會話,然後不斷創建新的會話,直到它被發現爲付費。然而,問題在於原來的會話被刪除,所有已經加載的實體的延遲加載將停止工作併產生錯誤。
它在我看來很簡單,但由於會話管理,似乎很複雜,任何想法如何去做呢?
謝謝!
誰收到通知?也爲什麼不能使用session.refresh()而不是創建新的會話? – Firo 2012-02-08 16:28:01