Compartir a través de


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