How to: Participate in Transactions in Web Services Created Using ASP.NETÂ
Code Example
For an XML Web service created using ASP.NET, you can declare the Web service's transactional behavior by setting the TransactionOption property of the WebMethod attribute applied to the Web service method. For an explanation of how transactions work for Web service methods, see Transactions in ASP.NET XML Web Services.
To participate in a transaction from a Web service method
Declare a Web service.
<%@ WebService Language="C#" Class="Orders" %>
<%@ WebService Language="VB" Class="Orders" %>
Add an Assembly directive to System.EnterpriseServices.
<%@ Assembly name="System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" %>
Add references to the System.Web.Services and System.EnterpriseServices namespaces.
using System.Web.Services; using System.EnterpriseServices;
Imports System.Web.Services Imports System.EnterpriseServices
Declare a Web service method, setting the TransactionOption property of the WebMethodAttribute attribute to System.EnterpriseServices.TransactionOption.RequiresNew .
[ WebMethod(TransactionOption=TransactionOption.RequiresNew)] public int DeleteAuthor(string lastName)
< WebMethod(TransactionOption:=TransactionOption.RequiresNew)> _ Public Function DeleteAuthor(lastName As String) As Integer
Example
<%@ 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 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();
sqlConn.Close();
return cmdResult;
}
}
<%@ WebService Language="VB" Class="Orders" %>
<%@ assembly name="System.EnterpriseServices" %>
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Imports System.Web.Util
Imports System.EnterpriseServices
Public Class Orders
<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 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()
Return cmdResult
End Function
End Class
Robust Programming
In the preceding example, if the database operation throws an exception, the transaction is automatically aborted; otherwise, the transaction is committed.
See Also
Reference
TransactionOption Enumeration
WebMethodAttribute.TransactionOption Property
Concepts
Transactions in ASP.NET XML Web Services