다음을 통해 공유


WebMethodAttribute.TransactionOption 속성

정의

XML Web services 메서드의 트랜잭션 지원을 나타냅니다.

public:
 property System::EnterpriseServices::TransactionOption TransactionOption { System::EnterpriseServices::TransactionOption get(); void set(System::EnterpriseServices::TransactionOption value); };
public:
 property System::Web::Services::TransactionOption TransactionOption { System::Web::Services::TransactionOption get(); void set(System::Web::Services::TransactionOption value); };
public System.EnterpriseServices.TransactionOption TransactionOption { get; set; }
public System.Web.Services.TransactionOption TransactionOption { get; set; }
member this.TransactionOption : System.EnterpriseServices.TransactionOption with get, set
member this.TransactionOption : System.Web.Services.TransactionOption with get, set
Public Property TransactionOption As TransactionOption

속성 값

TransactionOption
TransactionOption

XML Web services 메서드의 트랜잭션 지원입니다. 기본값은 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 프로토콜의 상태 비속어 특성으로 인해 트랜잭션의 루트 개체로만 참여할 수 있습니다. COM 개체가 Component Services 관리 도구의 트랜잭션 내에서 실행되도록 표시된 경우 XML 웹 서비스 메서드는 XML 웹 서비스 메서드와 동일한 트랜잭션에 참여하는 COM 개체를 호출할 수 있습니다. 속성이 있는 TransactionOption XML Web services 메서드가 다른 XML Web services 메서드의 속성을 사용 TransactionOption 하거나 RequiresNew``RequiresNew 호출하는 경우 XML 웹 서비스 메서드는 트랜잭션의 Required 루트 개체로만 작동할 수 있으므로 각 XML 웹 서비스 메서드가 자체 트랜잭션에 참여 Required 합니다.

항목 설명
사용 안 함 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 웹 서비스 메서드에서 예외가 throw되거나 catch되지 않으면 트랜잭션이 자동으로 중단됩니다. 예외가 발생하지 않으면 메서드가 명시적으로 호출 SetAbort하지 않는 한 트랜잭션이 자동으로 커밋됩니다.

적용 대상

추가 정보