Transacciones automáticas y servicios Web XML
ASP.NET proporciona compatibilidad integrada para crear y exponer servicios Web XML mediante una abstracción de programación que sea coherente y familiar para los formularios Web Forms. El modelo resultante es escalable, ampliable y abarca, entre otros, los estándares abiertos de Internet HTTP, XML, SOAP y WSDL. Como se admiten estándares abiertos, cualquier cliente o dispositivo habilitado para Internet puede tener acceso a los servicios Web XML y utilizarlos.
Los servicios Web XML proporcionan la opción de ejecutar el código propio dentro del ámbito de una transacción automática. Una transacción garantiza que todas las interacciones con administradores de recursos, como los servidores SQL Server, Message Queuing, Oracle Server y SNA Server, conserven las propiedades ACID requeridas para ejecutar aplicaciones distribuidas sólidas.
Se pueden declarar transacciones automáticas mediante la propiedad TransactionOption de la clase de atributos WebMethodAttribute. Si se establece la propiedad TransactionOption en TransactionOption.RequiresNew, comienza una nueva transacción cada vez que un cliente de servicios Web XML llame al método de servicios Web XML
El fragmento de código siguiente muestra un servicio que expone un único método de servicios Web XML denominado DeleteAuthor
. Este método de servicios Web XML realiza una operación de base de datos dentro del ámbito de una transacción automática.
<%@ 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
Inherits WebService
<WebMethod(TransactionOption := TransactionOption.RequiresNew)> _
Public Function DeleteAuthor(lastName As String) As Integer
Dim deleteCmd As [String] = "DELETE FROM authors2 where au_lname='"
& lastName & "'"
Dim sqlConn As New SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver")
Dim myCommand As New SqlCommand(deleteCmd, sqlConn)
' If a XML Web service method is participating in a transaction and
' an exception occurs, ASP.NET automatically aborts the transaction.
' Likewise, if no exception occurs, then the transaction is
' automatically committed.
myCommand.Connection.Open()
Return myCommand.ExecuteNonQuery()
End Function
End Class
[C#]
<%@ WebService Language="C#" Class="Orders" %>
<%@ assembly name="System.EnterpriseServices" %>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web.Util;
using System.EnterpriseServices;
public class Orders : WebService
{
[ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
public int DeleteAuthor(string lastName)
{
String deleteCmd = "DELETE FROM authors2
where au_lname='" + lastName + "'" ;
SqlConnection sqlConn = new SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver");
SqlCommand myCommand = new SqlCommand(deleteCmd,sqlConn);
// If a XML Web service method is participating in a transaction and an
// exception occurs, ASP.NET automatically aborts the transaction.
// Likewise, if no exception occurs, then the transaction is
// automatically committed.
myCommand.Connection.Open();
return myCommand.ExecuteNonQuery();
}
}
Nota Una transacción sólo comienza cuando el método de servicios Web XML de activación, que es el método al que llama el cliente, tiene metadatos de transacción. Si el método de servicios Web XML de activación no tiene los metadatos de transacción apropiados, los métodos de servicios Web XML posteriores no pueden participar en una transacción existente ni empezar una transacción nueva.
Vea también
Transacciones automáticas | Transacciones distribuidas Participar en transacciones de servicios Web XML creados mediante ASP.NET