방법: 자동 트랜잭션을 사용하는 웹 서비스 메서드 만들기

다음 절차에서는 자동 트랜잭션을 사용하는 웹 서비스 메서드를 만드는 방법에 대해 설명합니다. 웹 서비스 메서드가 트랜잭션에 참여하는 동안 예외가 발생하면 ASP.NET에서 자동으로 트랜잭션을 중단합니다. 마찬가지로 예외가 발생하지 않으면 트랜잭션이 자동으로 커밋됩니다.

자동 트랜잭션을 사용하는 웹 서비스를 만들려면

  1. System.WebServices 및 System.EnterpriseServices 네임스페이스를 가져옵니다. 필요한 경우 System.Data, System.Data.SqlClient 등과 같은 다른 네임스페이스를 가져올 수 있습니다.

    <%@ WebService Language="VB" Class="Orders" %>
    <%@ assembly name="System.EnterpriseServices" %>
    Imports System.Web.Services
    Imports System.EnterpriseServices
    
    <%@ WebService Language="C#" Class="Orders" %>
    <%@ assembly name="System.EnterpriseServices" %>
    using System.Web.Services;
    using System.EnterpriseServices;
    
  2. WebService 클래스에서 파생되는 클래스를 정의합니다. 예를 들어, 다음 코드에서는 WebService 클래스에서 파생된 Orders라는 클래스를 정의합니다.

    Public Class Orders
       Inherits WebService
    End Class
    
    public class Orders : WebService 
    {
    }
    
  3. 자동으로 트랜잭션에 참여해야 하는 각 웹 메서드의 경우 WebMethodAttribute 특성을 적용하고 트랜잭션 옵션을 설정합니다. 예를 들어, 다음 코드에서는 DeleteAuthor 메서드에 WebMethod 특성이 적용되고 TransactionOption 속성이 TransactionOption.RequiresNew로 설정됩니다.

    <WebMethod(TransactionOption := TransactionOption.RequiresNew)> _
    Public Function DeleteAuthor(lastName As String) As Integer
         ' Perform the required database task.
    End Function
    
    [ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
    public int DeleteAuthor(string lastName)  
    {
       // Perform the required database task.
    }
    

예제

<%@ WebService Language="VB" Class="Orders" %>
<%@ assembly name="System.EnterpriseServices" %>

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Imports System.Web.Util
Imports System.EnterpriseServices

Public Class Orders
   Inherits WebService
   
   <WebMethod(TransactionOption := TransactionOption.RequiresNew)> _
Public Function DeleteAuthor(lastName As String) As Integer

      Dim deleteCmd As [String] = "DELETE FROM authors2 where au_lname='" 
         & lastName & "'"
      Dim sqlConn As New SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver")
      Dim myCommand As New SqlCommand(deleteCmd, sqlConn)

      ' If a Web service method is participating in a transaction and 
      ' an exception occurs, ASP.NET automatically aborts the transaction.
      ' Likewise, if no exception occurs, then the transaction is
      ' automatically committed.
      myCommand.Connection.Open()
      Return myCommand.ExecuteNonQuery()
   End Function
End Class
<%@ WebService Language="C#" Class="Orders" %>
<%@ assembly name="System.EnterpriseServices" %>

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
using System.Web.Util;
using System.EnterpriseServices;

public class Orders : WebService 
  {
     [ WebMethod(TransactionOption=TransactionOption.RequiresNew)]
     public int DeleteAuthor(string lastName)  
     {
       String deleteCmd = "DELETE FROM authors2 
          where au_lname='" + lastName + "'" ;
    
         SqlConnection sqlConn = new SqlConnection("Integrated Security=SSPI;database=pubs;server=myserver");
         SqlCommand myCommand = new SqlCommand(deleteCmd,sqlConn);

   // If a Web service method is participating in a transaction and an 
   // exception occurs, ASP.NET automatically aborts the transaction.
   // Likewise, if no exception occurs, then the transaction is
   // automatically  committed.

         myCommand.Connection.Open();
      return myCommand.ExecuteNonQuery();
     }
}

참고 항목

개념

자동 트랜잭션 및 XML Web Services

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.