ASP.NET XML Web services 中的事务

Web 服务的事务支持利用公共语言运行库中的支持,后者基于 Microsoft Transaction Server (MTS) 和 COM+ 服务中的分布式事务模型。 该模型的基础是以声明方式确定对象是否参与事务,而不是编写特定的代码来处理事务的提交和回滚。 对于使用 ASP.NET 创建的 Web 服务,通过为应用于 Web 服务方法的 WebMethod 属性 (Attribute) 设置 TransactionOption 属性 (Property),可以声明其事务行为。 有关示例,请参见如何:参与用 ASP.NET 创建的 Web 服务中的事务

如果 Web 服务方法在执行时引发了异常,将自动中止事务;与此相反,如果未出现异常,将自动提交事务。

WebMethodAttribute 属性 (Attribute) 的 TransactionOption 属性 (Property) 指定 Web 服务方法参与事务的方式。 虽然此声明级别表示事务的逻辑,但这是从物理事务中移除的一个步骤。 当事务对象访问数据资源(例如数据库或消息队列)时,就会发生物理事务。 与该对象关联的事务会自动流向相应的资源管理器。 .NET Framework 数据提供程序(例如,用于 SQL Server 的 .NET Framework 数据提供程序或用于 OLE DB 的 .NET Framework 数据提供程序)会在该对象的上下文中查找该事务,并通过分布式事务协调程序 (DTC) 在事务中登记。 整个事务是自动发生的。

Web 服务方法只能以新事务根的形式参与事务。 作为新事务的根,它与资源管理器(例如运行 Microsoft SQL Server、Microsoft 消息队列(也称为 MSMQ)和 Microsoft Host Integration Server 的服务器)的所有交互都会维护运行可靠的分布式应用程序所需的 ACID 属性。 调用其他 Web 服务方法的 Web 服务方法可以参与不同的事务,因为这些事务不会流经 Web 服务方法。

Note注意:

对于实现 Web 服务方法的方法,如果由于 Internet 请求它所在的或与之关联的扩展名为 .asmx 的文件而未调用该方法,则 TransactionOption 属性的值无效。 当该方法驻留在其中的类是 Visual Studio .NET 项目中的成员,并且 Web 服务未使用代理类调用时,就可能发生此情况。 在 Visual Studio .NET 中,代理类是在添加 Web 引用时生成的。

请参见

任务

如何:参与用 ASP.NET 创建的 Web 服务中的事务

参考

TransactionOption Enumeration
WebMethodAttribute.TransactionOption Property

其他资源

Transaction Processing
使用 ASP.NET 的 XML Web services

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。