OperationBehavior(TransactionScopeRequired = true)vs TransactionFlow(TransactionFlowOption.Mandatory)

时间:2014-03-09 19:20:12

标签: c# wcf

我在这里找到了一个答案:

TransactionFlow(TransactionFlowOption.Mandatory) OperationBehavior(TransactionScopeRequired = true

我在这里仍然缺少的是,这两种独立的配置如何协同工作。

例如,如果我有这个:

[OperationBehavior(TransactionScopeRequired = true)]

而不是:

[TransactionFlow(TransactionFlowOption.Allowd)]

交易是否是强制性的/必需的?

1 个答案:

答案 0 :(得分:1)

如果客户端有一个事务服务,则将它与TFO一起使用。仅在绑定允许的情况下允许它,并且客户端也在它的绑定中传播它。

TransactionSocepRequired = true且事务从客户端流出,服务的环境事务将被设置为客户端事务。

答案是:如果客户端没有设置事务,WCF将创建一个新事务作为环境事务。

这是包含组合的表格(信用Juval Lowy编程WCF服务手册):

+--------------------------+-----------------------+--------------------------+------------------+
| Binding transaction flow | TransactionFlowOption | TransactionScopeRequired | Transaction mode |
+--------------------------+-----------------------+--------------------------+------------------+
| False                    | Allowed               | False                    | None             |
| False                    | Allowed               | True                     | Service          |
| False                    | Not Allowed           | False                    | None             |
| False                    | Not Allowed           | True                     | Service          |
| True                     | Allowed               | False                    | None             |
| True                     | Allowed               | False                    | None             |
| True                     | Allowed               | True                     | Client/Service   |
| True                     | Mandatory             | False                    | None             |
| Tru                      | Mandatory             | True                     | Client           |
+--------------------------+-----------------------+--------------------------+------------------+