C# 等待使用nhibernate将项目标记为由其他线程支付
我有一个相对简单的问题,如果没有很多丑陋的变通办法,我无法解决这个问题。基本上,我正在开发一个支付网关客户端,其中的过程是网站通知支付服务器要完成的支付,客户端被转移到支付服务器,一旦支付完成,支付服务器在一个单独的线程上通知网站已完成支付,并重定向客户端。现在,客户可以在收到付款通知之前在网站上“收到”。因此,我需要对系统进行编程,使其等待直到收到通知,或者最多30秒 收到通知后,C# 等待使用nhibernate将项目标记为由其他线程支付,c#,database,multithreading,nhibernate,asynchronous,C#,Database,Multithreading,Nhibernate,Asynchronous,我有一个相对简单的问题,如果没有很多丑陋的变通办法,我无法解决这个问题。基本上,我正在开发一个支付网关客户端,其中的过程是网站通知支付服务器要完成的支付,客户端被转移到支付服务器,一旦支付完成,支付服务器在一个单独的线程上通知网站已完成支付,并重定向客户端。现在,客户可以在收到付款通知之前在网站上“收到”。因此,我需要对系统进行编程,使其等待直到收到通知,或者最多30秒 收到通知后,订单实体将标记为“已付款”。问题是: 客户端被重定向到之前的网站,订单。支付的仍然是false 1-5秒后,收到
订单
实体将标记为“已付款”。问题是:
- 客户端被重定向到之前的网站,
仍然是订单。支付的
false
- 1-5秒后,收到通知,
标记为Order
true
- 由于Nhibernate会话管理,客户端仍然会在另一个线程上看到
为Order.Paid
李>false
- 更糟糕的是,有时客户的
会在订单
时刷新,而结束请求
会再次重置为订单.Paid
false
谢谢 从我发帖的时候起,我就设法找到了解决这个问题的办法 基本上,NHibernate是如何工作的——如果会话上发生任何异常,则必须处理该会话。这也适用于使用乐观并发时的
StaleObjectException
。客户端仍然看到“未付款”的原因是会话未被处理
谷歌图书(Google Books)上的一个图书片段更详细地解释了这一点:
谁收到通知?还有,为什么不能使用session.refresh()而不是创建新会话?