WebMethodAttribute.TransactionOption Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Обозначает поддержку транзакций для метода веб-службы 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
Значение свойства
Поддержка транзакций метода веб-службы XML. Значение по умолчанию — Disabled.
Примеры
В приведенном ниже примере начинается новая транзакция при вызове Transfer
метода .
// <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
Комментарии
Методы веб-службы XML могут участвовать только в качестве корневого объекта в транзакции из-за характера протокола HTTP без отслеживания состояния. Методы веб-службы XML могут вызывать COM-объекты, участвующие в той же транзакции, что и метод веб-службы XML, если com-объект помечен для выполнения в транзакции в средстве администрирования служб компонентов. Если метод веб-службы XML со свойством TransactionOptionRequired
или RequiresNew
вызывает другой метод веб-службы XML со свойством TransactionOptionRequired
или RequiresNew
, каждый метод веб-службы XML участвует в собственной транзакции, так как метод веб-службы XML может выступать только в качестве корневого объекта в транзакции.
Item | Описание: |
---|---|
Выключено | Указывает, что метод веб-службы XML не выполняется в области транзакции. При обработке запроса метод веб-службы XML выполняется без транзакции. [WebMethod(TransactionOption= TransactionOption.Disabled )] |
NotSupported | Указывает, что метод веб-службы XML не выполняется в области транзакции. При обработке запроса метод веб-службы XML выполняется без транзакции. [WebMethod(TransactionOption= TransactionOption.NotSupported )] |
Поддерживается | Указывает, что метод веб-службы XML не выполняется в области транзакций. При обработке запроса веб-служба XML создается без транзакции. [WebMethod(TransactionOption= TransactionOption.Supported )] |
Обязательно | Указывает, что для метода веб-службы XML требуется транзакция. Так как методы веб-службы XML могут участвовать только в качестве корневого объекта в транзакции, для метода веб-службы XML будет создана новая транзакция. [WebMethod(TransactionOption= TransactionOption.Required )] |
RequiresNew | Указывает, что для метода веб-службы XML требуется новая транзакция. При обработке запроса веб-служба XML создается в новой транзакции. [WebMethod(TransactionOption= TransactionOption.RequiresNew )] |
Если исключение создается методом веб-службы XML или не перехватывается, транзакция автоматически прерывается. Если исключений не возникает, транзакция автоматически фиксируется, если метод явно не вызывает SetAbort
.