如何通过Web服务(如工作单元)实现长时间运行的事务

时间:2014-03-13 20:57:42

标签: c# wcf rest transactions unit-of-work

我正在设计一个使用Web服务的Web服务和桌面客户端应用程序。该接口要求您需要能够执行多个操作并一次提交所有操作。这些操作是基本的CRUD操作(创建,读取,更新,删除)。

这是一个关于工作流程的粗略和Car-ified示例:

Rough idea of service calls

问题是服务呼叫可能会随着时间的推移而分散。我最初创建了一个REST Web服务,但REST的定义不应该是事务性的。接口必须能够一次性将所有操作提交到数据库(单击“保存”按钮)。

编辑:一个重要的规定是,鉴于上面的示例,服务器上的数据库中必须存在Car才能为其添加席位。在交易中,该汽车应仅对在该交易中工作的人(会话)可用。这限制了在工作流程结束时一次性将所有操作发送到Web服务的能力。

我到目前为止考虑的选项是:

1)使用SOAP(WCF)实现分布式事务,并且仅在GUI上单击“保存”时提交。对于更长的交易生命周期,这是可能/一个好主意吗?

2)创建一个工作单元“服务”,它接受操作并在服务器上的一个事务中执行所有操作。

我的问题是, 1)可能,还是好/坏主意? 2)是一个好主意,是否有任何模式/工具可以跨Web服务(REST或SOAP)实现这一点?或者有不同的方法来处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

我会试试这个:

POST /unit-of-work 
   create with response 200
POST /car
   create with response 202
POST /seat
   create with response 202
etc.
PUT /unit-of-work
   set "execute" bit, or somesuch

在这种情况下,汽车,座椅等在发布时会指定工作单位。当工作单元更新为"完成"时,所有项目都将被执行。

另一种方法是:

POST /car
   create with response 202
POST /seat
   create with response 202
etc.
POST /unit-of-work response 200

在这种情况下,汽车,座椅等有一套说明他们尚未创建。工作单元应指定属于它的资源,然后后端可以翻转其他资源上的位,以便创建它们。