[C#] using System.Web.Services; using
System.EnterpriseServices; [Visual Basic] Imports
System.Web.Services Imports
System.EnterpriseServices 声明一个XML
Web服务方法,设置WebMethod属性的TransactionOption属性为TransactionOption.RequiresNew。
[C#] [
WebMethod(TransactionOption=TransactionOption.RequiresNew)] public
int DeleteAuthor(string lastName) [Visual Basic] <
WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _ Public
Function DeleteAuthor(lastName As String) As
Integer 下面的代码示例显示一个使用单个XML Web服务方法的XML
Web服务,调用DeleteDatabase。这个XML
Web服务方法执行一个事务范围内的数据库操作。如果该数据库操作抛出一个异常,该事务自动地停止;否则,该事务自动地委托。
[C#] <%@ WebService Language="C#" Class="Orders" %> <%@ Assembly
name="System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
%> using System; using System.Data; using
System.Data.SqlClient; using System.Web.Services; using
System.EnterpriseServices;
public class Orders :
WebService { [
WebMethod(TransactionOption=TransactionOption.RequiresNew)] public int
DeleteAuthor(string lastName) { String deleteCmd = "DELETE FROM
authors WHERE au_lname='" + lastName + "'" ; String
exceptionCausingCmdSQL = "DELETE FROM NonExistingTable
WHERE au_lname='" + lastName + "'" ;
SqlConnection sqlConn = new
SqlConnection( "Persist Security Info=False;Integrated
Security=SSPI;database=pubs;server=myserver");
SqlCommand deleteCmd
= new SqlCommand(deleteCmdSQL,sqlConn); SqlCommand exceptionCausingCmd
= new SqlCommand(exceptionCausingCmdSQL,sqlConn);
// This
command should execute
properly. deleteCmd.Connection.Open(); deleteCmd.ExecuteNonQuery();
//
This command results in an exception, so the first command is //
automatically rolled back. Since the XML Web service method is //
participating in a transaction, and an exception occurs, ASP.NET //
automatically aborts the transaction. The deleteCmd that // executed
properly is rolled back.
int cmdResult =
exceptionCausingCmd.ExecuteNonQuery();
<WebMethod(TransactionOption:=TransactionOption.RequiresNew)>
_ Public Function DeleteAuthor (lastName as String) as Integer
Dim deleteCmdSQL As String = "DELETE FROM authors WHERE
au_lname='" + _ lastName + "'" Dim exceptionCausingCmdSQL As
String = "DELETE FROM " + _ "NonExistingTable WHERE au_lname='" +
lastName + "'"
Dim sqlConn As SqlConnection = New SqlConnection(
_ "Persist Security Info=False;Integrated
Security=SSPI;database=pubs;server=myserver")
Dim deleteCmd As
SqlCommand = New SqlCommand(deleteCmdSQL,sqlConn) Dim
exceptionCausingCmd As SqlCommand = New
_ SqlCommand(exceptionCausingCmdSQL,sqlConn)
' This command
should execute
properly. deleteCmd.Connection.Open() deleteCmd.ExecuteNonQuery()
'
This command results in an exception, so the first command is '
automatically rolled back. Since the XML Web service method is '
participating in a transaction, and an exception occurs, ASP.NET '
automatically aborts the transaction. The deleteCmd that ' executed
properly is rolled back.
Dim cmdResult As Integer =
exceptionCausingCmd.ExecuteNonQuery() sqlConn.Close()