【发布时间】:2014-03-13 20:57:42
【问题描述】:
我正在设计一个 Web 服务和一个使用该 Web 服务的桌面客户端应用程序。该接口要求您能够执行多个操作并一次提交所有操作。这些操作是基本的 CRUD 操作(创建、读取、更新、删除)。
这是一个粗略的、经过汽车化的工作流程示例:
问题在于服务调用可能会随着时间的推移而分散。我最初创建了一个 REST Web 服务,但根据定义,REST 不应该是事务性的。界面必须能够一次性将所有操作提交到数据库(单击“保存”按钮)。
编辑: 一个重要的规定是,对于上面的例子,一个 Car 必须存在于服务器上的数据库中才能添加座位。在事务中,该车应该只对在该事务中工作的人(会话)可用。这限制了在工作流结束时一次性将所有操作发送到 Web 服务的能力。
目前我考虑的选项是:
1) 使用 SOAP (WCF) 实现分布式事务,并且仅在 GUI 上单击“保存”时提交。对于更长的事务生命周期,这可能/一个好主意吗?
2) 创建一个工作单元“服务”,它接受操作并在服务器上的一个事务中执行所有操作。
我的问题是,1) 是可能的,还是一个好/坏的主意? 2) 是个好主意吗?是否有任何模式/工具可以跨 Web 服务(REST 或 SOAP)实现这一点?或者有什么不同的方法来处理这个问题?
【问题讨论】:
-
我已经编写了 WCF REST 服务,它需要近 30 多个对象,并且所有 CRUD 操作都在一个事务中完成。这样做没有害处。
-
感谢您的回复。我添加了一个规定来澄清为什么这在我的情况下不起作用。这是因为为了给汽车添加座位,汽车必须存在于用户会话的数据库中。但是,如果创建席位失败,则必须回滚整个会话。
标签: c# wcf rest transactions unit-of-work