ASP .NET,使用WCF进行并发控制

时间:2011-03-30 18:36:27

标签: asp.net wcf nhibernate concurrency

我想根据您对基于SOA的体系结构的经验以及如何使用WCF和nHibernate实现并发控制,向大家提供建议。

  1. ASP .NET(网络应用程序) - 1层(Web服务器)
  2. WCF + nHibernate - 第二层(应用程序服务器)
  3. Scenario1

    一个。 User1现在已经打开订单并对其进行编辑。 湾User2同时打开相同的订单并编辑它。

    我们如何阻止User2执行此操作。两个WCF调用“编辑顺序”都使用不同的nHibernate会话来获取记录,因为应用程序服务器被设计为无状态。

    如何配置nHibernate / WCF来处理这种情况?

    Scenario2

    如果输入订单涉及多个页面;如果订单数据在Web服务器(ASP .NET)上跨这些页面维护并在每个WCF调用上发布,并且处理订单业务逻辑,那么基于业务逻辑(WCF调用以确定下一页)显示页面?我的想法是对的吗?

    我知道另一种方法,即创建一个临时订单记录来维护跨页/ WCF调用的中间数据。

1 个答案:

答案 0 :(得分:3)

关于第一个场景,您不希望阻止用户尝试进行编辑;如果你试图强制执行悲观并发,你的系统永远不会扩展。

相反,您希望使用乐观并发;你的模型会有一个时间戳(通常是一个实际的日期时间值,或者更好的是,某种二进制值保证对于特定的上下文/表是唯一的)。大多数ORM(包括nHibernate,我相信)都支持乐观并发;在生成更新时,它只会更新记录,如果主键是相同的时间戳是相同的,如果不是,那么你知道其他人编辑了自上次以来的记录你获取数据的时间。

对于第二种情况,您可能需要考虑与WCF紧密集成的Windows Workflow。一般来说,我有一个单独的表,其中包含不完整的订单信息以及用户可以使用的密钥(可能是会话ID)来查找数据。

只有当您知道订单已完成时,才会将数据从“临时”表格移动到您的真实订单表。