WebMethodAttribute.TransactionOption 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指示 XML Web Service 方法的交易支援。
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 Web Service 方法的交易支援。 預設為 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 Web 服務方法只能參與為交易中的根物件,因為 HTTP 通訊協定的無狀態本質。 如果 COM 物件標示為在元件服務系統管理工具的交易內執行,XML Web 服務方法可以叫用參與與 XML Web 服務方法相同的交易的 COM 物件。 如果 XML Web 服務方法具有 的 屬性,或 RequiresNew
叫用另一 TransactionOption 個 TransactionOption XML Web 服務方法的 屬性 Required
為 或 RequiresNew
,則每個 XML Web 服務方法都會參與自己的交易,因為 XML Web 服務方法只能做為交易中的根物件。 Required
Item | 描述 |
---|---|
已停用 | 表示 XML Web 服務方法不會在交易的範圍內執行。 處理要求時,會執行 XML Web 服務方法,而不需交易。 [WebMethod (TransactionOption= TransactionOption.Disabled ) ] |
NotSupported | 表示 XML Web 服務方法不會在交易的範圍內執行。 處理要求時,會執行 XML Web 服務方法,而不需交易。 [WebMethod (TransactionOption= TransactionOption.NotSupported ) ] |
支援 | 表示 XML Web 服務方法不會在交易範圍內執行。 處理要求時,會建立 XML Web 服務,而不需交易。 [WebMethod (TransactionOption= TransactionOption.Supported ) ] |
必要 | 表示 XML Web 服務方法需要交易。 由於 XML Web 服務方法只能參與為交易中的根物件,因此將會為 XML Web 服務方法建立新的交易。 [WebMethod (TransactionOption= TransactionOption.Required ) ] |
RequiresNew | 表示 XML Web 服務方法需要新的交易。 處理要求時,XML Web 服務會在新的交易內建立。 [WebMethod (TransactionOption= TransactionOption.RequiresNew ) ] |
如果從 XML Web 服務方法擲回或未攔截到例外狀況,則交易會自動中止。 如果沒有發生例外狀況,除非 方法明確呼叫 SetAbort
,否則交易會自動認可。