目录
事务流配置
事务流和操作合同
环境事务
事务性服务编程
事务传播模式
客户端和服务事务
表决和完成
总结
事务是构建强大可靠、高质量的面向服务的应用程序的关键。Windows Communication Foundation 为服务开发人员提供了简单的声明性事务支持,使 您能够完全在服务的作用域之外配置诸如事务流和表决等参数。此外,Windows Communication Foundation 还允许客户端应用程序创建事务,并跨服务边界传 播它们。在本专栏中,我将详细介绍如何在 Windows Communication Foundation 中配置事务传播和表决,以及所产生的编程模型。
事务流配置
Windows Communication Foundation 可以跨服务边界传播事务。这使得服务 能够参与客户端的事务,并使客户端能够在同一事务中包含对多个服务的操作调 用。客户端本身可能是、也可能不是 Windows Communication Foundation 服务 。绑定和操作合同配置二者都会控制客户端事务是否传播给服务的决策。
对于能够将客户端的事务传播给服务(如果配置为这样做)的任何绑定,我 都称之为事务感知绑定。具体来说,只有 NetTcpBinding、 NetNamedPipeBinding、WSHttpBinding、WSDualHttpBinding 和 WSFederationHttpBinding 是事务感知绑定。默认情况下,事务感知绑定不传播 事务。原因是,像 Windows Communication Foundation 中的其他大多数绑定一 样,它是可选设置。
服务宿主或管理员必须显式同意接受可能来自跨组织或跨业务边界传入的事 务。若要传播事务,必须在服务宿主和客户端的绑定上都显式启用它。所有事务 感知绑定都提供布尔属性 TransactionFlow,其默认值为 False,如下所示:
public class NetTcpBinding : Binding,...
{
public bool TransactionFlow {get;set;}
//More members
}
若要启用传播,只需以编程方式或在宿主配置文件中将此属性设置为 True。 例如,使用配置文件时此代码片段将设置该属性:
<bindings>
<netTcpBinding>
<binding name = “TransactionalTCP” transactionFlow = “true” />
</netTcpBinding>
</bindings>
注意,服务元数据中不会发布 TransactionFlow 属性的值。如果使用 Visual Studio 2005 生成客户端配置文件,则仍然需要手动启用事务流。