ASP.NET创建Web服务之使用事务

ASP.NET创建Web服务之使用事务,第1张

ASP.NET创建Web服务之使用事务,第2张

支持XML Web services的事务利用了公共语言运行库的支持,它基于Microsoft Transaction Server (MTS)和COM+ Services中相同的分布式事务模型。该模型基于显式判断对象是否参与事务,而不是编写特定的代码来处理委托和回调事务。对于用ASP.net创建的XML Web services,可以通过设置应用于XML Web services方法的WebMethod属性的TransactionOption属性来声明XML Web services的事务行为。如果在执行XML Web service方法时引发异常,事务将自动结束。相反,如果没有异常发生,事务将被自动委托。

method属性的TransactionOption属性指定XML Web service方法如何参与事务。虽然这个声明级别代表一个事务逻辑,但它是消除实际事务的一个步骤。当事务对象访问数据源(如数据库或消息队列)时,会发生实际的事务。与该对象相关联的事务自动流向适当的资源管理器。的。NET框架数据提供程序,如。NET Framework数据提供程序(用于SQL Server或OLE DB)在对象的上下文中查找事务,并通过分布式事务处理协调器(DTC)对事务进行编目。所有交易都是自动生成的。

一个XML服务方法只能参与一个新事务的根事务。作为新事务的根,与资源管理器(如运行Microsoft SQL Server、Microsoft Message Queuing和Microsoft Host Integration Server的服务器)的所有交互都需要保持运行健壮的分布式应用程序的ACID特性。调用其他XML Web services方法的XML Web services方法参与不同的事务,因为事务不流经XML Web services方法。

使用XML Web服务方法中的事务。

声明一个XML Web服务。

[c#]
< % @ web service Language = " c# " Class = " Orders " % >
[Visual Basic]
< % @ web service Language = " VB " Class = " Orders " % >

向System.EntERPriseServices添加汇编指令。

< %@ Assembly name="System。EnterpriseServices,Version=1.0.3300.0,Culture=neutral,public key token = b 03 F5 f 7 f 11d 50 a 3a " % >

添加系统间域名空的引用。Web.Services和System.EnterpriseServices。

[c#]
使用系统。网络服务;
使用系统。企业服务;
[Visual Basic]
导入系统。web . Services
导入系统。企业服务

声明一个XML Web service方法,并将WebMethod属性的TransactionOption属性设置为TransactionOption。要求新

[c#]
[web method(transaction option = transaction option。requires new)]
public int delete author(string last name)
[Visual Basic]
< web method(transaction option:= transaction option。requires new)> _
公共函数DeleteAuthor(lastName为String)为整数

下面的代码示例演示一个XML Web services,它使用一个名为DeleteDatabase的XML Web services方法。这个XML Web服务方法在事务范围内执行数据库操作。如果数据库操作抛出异常,事务自动停止;否则,交易将被自动委托。

[c#]
< % @ web service Language = " c# " Class = " Orders " % >
< % @ Assembly name = " System。EnterpriseServices,Version=1.0.3300.0,Culture=neutral,public key token = b 03 F5 f 7 f 11d 50 a 3a " % >
using System;
使用系统。数据;
使用系统。Data . SqlClient
使用系统。网络服务;
使用系统。企业服务;

公共类Orders:web service
{
[web method(transaction option = transaction option。requires new)]
public int DELETE author(String last name)
{
String DELETE cmd = " DELETE FROM authors WHERE au _ lname = ' "+
last name+" ' ";
String exception causingmdsql = " DELETE FROM non existing table WHERE
au _ lname = ' "+last name+" ' ";

SqlConnection sqlConn = new SqlConnection(
" Persist Security Info = False;综合安全= SSPI;数据库= pubsserver = my server ");

SqlCommand delete cmd = new SqlCommand(deleteCmdSQL,sqlConn);
SqlCommand exceptioncausingmd = new
SqlCommand(exceptionCausingCmdSQL,sqlConn);

//此命令应该正确执行。
deleteCmd。connection . Open();
deleteCmd。ExecuteNonQuery();

//此命令导致异常,因此第一个命令
//自动回滚。由于XML Web Service方法
//参与事务,并且发生异常,ASP。NET
//自动中止事务。
//正确执行的deleteCmd将被回滚。

int cmd result = exceptioncausingmd。ExecuteNonQuery();

sqlConn。close();

返回cmdResult
}
}
[Visual Basic]
< % @ web service Language = " VB " Class = " Orders " % >
< % @ assembly name = " System。企业服务" % >

Imports System
导入系统。数据
导入系统。data . SqlClient
导入系统。web . Services
导入系统。web . Util
导入系统。企业服务

公共类订单

< web method(transaction option:= transaction option。requires new)> _
公共函数DeleteAuthor (lastName为String)为整数

Dim deleteCmdSQL As String = " DELETE FROM authors WHERE au _ lname = ' "+_
last name+" ' "
Dim exceptioncausingmdsql As String = " DELETE FROM "+_
" non existing table WHERE au _ lname = ' "+last name+" ' "

dim sqlConn As SqlConnection = New SqlConnection(_
" Persist Security Info = False;综合安全= SSPI;数据库= pubsserver=myserver”)

Dim delete cmd As SqlCommand = New SqlCommand(deleteCmdSQL,sqlConn)
Dim exceptionCausingCmd As SqlCommand = New _
SqlCommand(exceptioncausingmdsql,sqlConn)

该命令应该正确执行。
deleteCmd。connection . Open()
delete cmd。ExecuteNonQuery()

该命令会导致异常,因此第一个命令会
'自动回滚。由于XML Web service方法
'参与了事务,并且发生了异常,因此ASP。NET
'会自动中止事务。
'正确执行的deleteCmd将被回滚。

dim cmd result As Integer = exceptionCausingCmd。ExecuteNonQuery()
sqlConn。关闭()

Return cmdResult
End函数
End类

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » ASP.NET创建Web服务之使用事务

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情