我想根据您在基于SOA的体系结构方面的经验以及如何通过WCF和nHibernate实现并发控制,向大家提供建议。
Scenario1
User1现在已经打开了一个订单并编辑了它。User2同时打开相同的订单并对其进行编辑。
如何防止User2执行此操作。对“编辑顺序”的两个WCF调用都使用不同的nHibernate会话获取记录,因为应用服务器设计为无状态。
如何配置nHibernate/WCF来处理这种场景?
Scenario2
如果输入订单涉及多个页面;随着基于业务逻辑的页面显示(WCF调用确定下一页),是否应该在这些页面上维护订单数据(ASP .NET),并将其张贴在每个WCF调用上,以处理订单业务逻辑?我的想法对吗?
我知道另一种方法,就是创建一个临时订单记录,以维护跨页面/WCF调用的中间数据。
发布于 2011-03-30 18:55:37
关于第一种情况,您不希望阻止用户进行编辑;如果尝试执行悲观的并发性,您的系统将永远不会扩展。
相反,您希望使用乐观并发;您的模型将有一个时间戳(通常是一个实际的日期时间值,或者更好的是,某些类型的二进制值保证对特定的上下文/表是唯一的)。大多数ORM(我确信包括nHibernate )都支持乐观并发性;在生成更新时,只有在主键相同且时间戳相同的情况下,它才会更新记录,如果不是,那么您就知道自上次获取数据以来,还有人编辑了记录。
对于第二个场景,您可能需要考虑Windows工作流,它与WCF紧密集成。不过,通常情况下,我会有一个单独的表,其中包含不完整的订单信息以及用户可以使用的键(可能是会话id)来查找数据。
只有当您知道订单已经完成时,才会将数据从“暂存”表移到真正的订单表。
https://stackoverflow.com/questions/5490626
复制相似问题