ASP.NET XML Web services 中的事务

本主题专门介绍一项旧有技术。现在应通过使用以下链接来创建 XML Web 服务和 XML Web 服务客户端: Windows Communication Foundation.

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

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

WebMethodAttribute 特性的 TransactionOption 属性指定 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 服务方法。

85f292h1.note(zh-cn,VS.100).gif注意:
对于实现 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