WebMethodAttribute.TransactionOption Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica o suporte a transações de um método de serviço 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 Propriedade
O suporte de transações de um método de serviço Web XML. A predefinição é Disabled.
Exemplos
O exemplo abaixo inicia uma nova transação quando o Transfer método é chamado.
// <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
Observações
Os métodos de serviço Web XML só podem participar como objeto raiz numa transação, devido à natureza sem estado do protocolo HTTP. Os métodos de serviço Web XML podem invocar objetos COM que participam na mesma transação que o método do serviço Web XML, se o objeto COM estiver marcado para ser executado numa transação na ferramenta administrativa de Serviços de Componentes. Se um método de serviço Web XML com uma TransactionOption propriedade de Required ou RequiresNew invocar outro método de serviço Web XML com a TransactionOption propriedade de Required ou RequiresNew, cada método de serviço Web XML participa na sua própria transação, porque um método de serviço Web XML só pode atuar como objeto raiz numa transação.
| Item | Description |
|---|---|
| Disabled | Indica que o método do serviço Web XML não corre dentro do âmbito de uma transação. Quando um pedido é processado, o método do serviço Web XML é executado sem qualquer transação. [WebMethod(TransactionOption= TransactionOption.Disabled)] |
| Não Suportado | Indica que o método do serviço Web XML não corre dentro do âmbito de uma transação. Quando um pedido é processado, o método do serviço Web XML é executado sem qualquer transação. [WebMethod(TransactionOption= TransactionOption.NotSupported)] |
| Suportado | Indica que o método do serviço Web XML não corre dentro do âmbito das transações. Quando um pedido é processado, o serviço Web XML é criado sem qualquer transação. [WebMethod(TransactionOption= TransactionOption.Supported)] |
| Obrigatório | Indica que o método do serviço Web XML requer uma transação. Como os métodos de serviço Web XML só podem participar como objeto raiz numa transação, será criada uma nova transação para o método de serviço Web XML. [WebMethod(TransactionOption= TransactionOption.Required)] |
| ExigeNovo | Indica que o método do serviço Web XML requer uma nova transação. Quando um pedido é processado, o serviço Web XML é criado dentro de uma nova transação. [WebMethod(TransactionOption= TransactionOption.RequiresNew)] |
Se uma exceção for lançada ou não ser detetada por um método de serviço Web XML, a transação é automaticamente abortada. Se não ocorrerem exceções, a transação é automaticamente comprometida, a menos que o método chame SetAbortexplicitamente .