WebMethodAttribute.TransactionOption Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Indica la compatibilidad con transacciones de un método de servicios Web XML.
public:
property System::EnterpriseServices::TransactionOption TransactionOption { System::EnterpriseServices::TransactionOption get(); void set(System::EnterpriseServices::TransactionOption value); };
public System.EnterpriseServices.TransactionOption TransactionOption { get; set; }
member this.TransactionOption : System.EnterpriseServices.TransactionOption with get, set
Public Property TransactionOption As TransactionOption
Valor de propiedad
Compatibilidad con transacciones de un método de servicios Web XML. De manera predeterminada, es Disabled.
Ejemplos
En el ejemplo siguiente se inicia una nueva transacción cuando se llama al Transfer
método .
// <Snippet1>
<%@ WebService Language="C#" Class="Bank"%>
<%@ assembly name="System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" %>
using System;
using System.Web.Services;
using System.EnterpriseServices;
public class Bank : WebService {
[ WebMethod(TransactionOption=TransactionOption.RequiresNew) ]
public void Transfer(long Amount, long AcctNumberTo, long AcctNumberFrom) {
MyCOMObject objBank = new MyCOMObject();
if (objBank.GetBalance(AcctNumberFrom) < Amount )
// Explicitly abort the transaction.
ContextUtil.SetAbort();
else {
// Credit and Debit methods explicitly vote within
// the code for their methods whether to commit or
// abort the transaction.
objBank.Credit(Amount, AcctNumberTo);
objBank.Debit(Amount, AcctNumberFrom);
}
}
}
// </Snippet1>
public class MyCOMObject {
public long GetBalance(long AcctNumber){return 0;}
public void Credit( long Amount, long AcctNumber) {}
public void Debit( long Amount, long AcctNumber) {}
}
' <Snippet1>
<%@ WebService Language="VB" Class="Bank"%>
<%@ assembly name="System.EnterpriseServices,Version=1.0.3300.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" %>
Imports System
Imports System.Web.Services
Imports System.EnterpriseServices
Public Class Bank
Inherits WebService
<WebMethod(TransactionOption := TransactionOption.RequiresNew)> _
Public Sub Transfer(Amount As Long, AcctNumberTo As Long, AcctNumberFrom As Long)
Dim objBank As New MyCOMObject()
If objBank.GetBalance(AcctNumberFrom) < Amount Then
' Explicitly abort the transaction.
ContextUtil.SetAbort()
Else
' Credit and Debit method explicitly vote within
' the code for their methods whether to commit or
' abort the transaction.
objBank.Credit(Amount, AcctNumberTo)
objBank.Debit(Amount, AcctNumberFrom)
End If
End Sub
End Class
' </Snippet1>
Public Class MyCOMObject
Public Function GetBalance(AcctNumber As Long)
End Function
Public Sub Credit(Amount as Long, AcctNumber As Long)
End Sub
Public Sub Debit(Amount as Long, AcctNumber As Long)
End Sub
End Class
Comentarios
Los métodos de servicio web XML solo pueden participar como objeto raíz en una transacción, debido a la naturaleza sin estado del protocolo HTTP. Los métodos de servicio web XML pueden invocar objetos COM que participan en la misma transacción que el método de servicio web XML, si el objeto COM está marcado para ejecutarse dentro de una transacción en la herramienta administrativa Servicios de componentes. Si un método de servicio web XML con una TransactionOption propiedad de Required
o RequiresNew
invoca otro método de servicio web XML con una TransactionOption propiedad de Required
o RequiresNew
, cada método de servicio web XML participa en su propia transacción, porque un método de servicio web XML solo puede actuar como el objeto raíz de una transacción.
Elemento | Descripción |
---|---|
Disabled | Indica que el método de servicio web XML no se ejecuta dentro del ámbito de una transacción. Cuando se procesa una solicitud, el método de servicio web XML se ejecuta sin una transacción. [WebMethod(TransactionOption= TransactionOption.Disabled )] |
NotSupported | Indica que el método de servicio web XML no se ejecuta dentro del ámbito de una transacción. Cuando se procesa una solicitud, el método de servicio web XML se ejecuta sin una transacción. [WebMethod(TransactionOption= TransactionOption.NotSupported )] |
Compatible | Indica que el método de servicio web XML no se ejecuta dentro del ámbito de las transacciones. Cuando se procesa una solicitud, el servicio web XML se crea sin una transacción. [WebMethod(TransactionOption= TransactionOption.Supported )] |
Requerido | Indica que el método de servicio web XML requiere una transacción. Dado que los métodos de servicio web XML solo pueden participar como objeto raíz en una transacción, se creará una nueva transacción para el método de servicio web XML. [WebMethod(TransactionOption= TransactionOption.Required )] |
RequiresNew | Indica que el método de servicio web XML requiere una nueva transacción. Cuando se procesa una solicitud, el servicio web XML se crea dentro de una nueva transacción. [WebMethod(TransactionOption= TransactionOption.RequiresNew )] |
Si un método de servicio web XML detecta o no detecta una excepción, la transacción se anula automáticamente. Si no se produce ninguna excepción, la transacción se confirma automáticamente a menos que el método llame explícitamente a SetAbort
.