방법: Visual Basic .NET에서 ServicedComponent에서 사용하여 .NET 공급자 사용하여 분산된 트랜잭션 수행

기술 자료 번역 기술 자료 번역
기술 자료: 316627 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 ServicedComponent에서 클래스와 .NET 공급자를 사용하여 분산된 트랜잭션을 수행하는 방법을 보여 줍니다. 이 문서에서는 Microsoft SQL Server 서버에 대해 SqlClient .NET 공급자가 사용하지만 ODBC 또는 OLE DB .NET 관리되는 공급자를 사용할 수도 있습니다.

요구 사항

다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩의 목록입니다.
  • Microsoft Windows 2000 Professional, Windows 2000 Server는 Windows 2000 고급 서버
  • Microsoft Visual Studio .NET
  • Microsoft SQL Server 7.0 또는 SQL Server 2000

개요

이렇게 하려면 클래스 준비하는 경우 .NET Framework 클래스의 인스턴스를 자동 트랜잭션에 참여할 수 있습니다. 클래스 인스턴스 또는 개체에 액세스하는 각 리소스 트랜잭션에 참여합니다. 예를 들어, 데이터베이스의 계정의 돈을 게시할 ADO.NET 개체를 사용하는 경우 리소스 관리자가 데이터베이스 개체가 트랜잭션에서 실행하는지 여부를 결정합니다. 개체가 트랜잭션에서 실행해야 하는 경우 리소스 관리자는 트랜잭션 데이터베이스에 자동으로 참여시킵니다.

자동 트랜잭션에 참여하도록 클래스를 준비하는 데 다음 과정을 수행하십시오.
  1. TransactionAttribute 클래스를 구성 요청을 자동 트랜잭션 형식을 지정하려면 클래스에 적용됩니다.

    트랜잭션 형식 TransactionOption 열거형 구성원이어야 합니다. 예를 들어,:
    <Transaction(TransactionOption.Required)> Public Class Bar
       Inherits ServicedComponent
       '. . .
    End Class
    					
  2. ServicedComponent에서 클래스에서 클래스를 파생시킵니다. ServicedComponent에서 COM + 서비스를 사용하는 모든 클래스의 기본 클래스입니다.
  3. 어셈블리의 고유 키 쌍을 포함하는 확인해야 강력한 이름으로 어셈블리에 서명하십시오.
  4. 클래스를 COM + 카탈로그가 포함된 어셈블리를 등록하십시오.

    참고: 사용자 클래스의 인스턴스를 호출하는 클라이언트 공용 언어 런타임에서 관리되는 경우, 등록이 자동으로 수행됩니다. 관리되지 않는 호출자가 만들고 해당 클래스의 인스턴스를 호출하는 경우에만 이 단계가 필요합니다. .NET 서비스 설치 도구를 (Regsvcs.exe) 수동으로 어셈블리를 등록할 수 있습니다.
강력한 이름으로 어셈블리를 서명하는 방법에 대한 자세한 내용은 Microsoft .NET Framework 개발자 가이드 에서 다음 항목을 참조하십시오.
강력한 이름으로 어셈블리 서명
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconassigningassemblystrongname.asp
이 프로세스에 대한 자세한 내용은 .NET Framework 개발자 가이드 에서 다음 항목을 참조하십시오.
자동 트랜잭션 및 .NET Framework 클래스
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconautomatictransactionsnetframeworkclasses.asp

프로젝트 만들기

  1. Visual Basic .NET에서 새 콘솔 응용 프로그램 프로젝트를 만들려면 다음과 같이 하십시오.
    1. Visual Studio .NET 시작하십시오.
    2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트 를 클릭하십시오.
    3. 새 프로젝트 대화 상자에서 Visual Basic 프로젝트프로젝트 형식 에서 콘솔 응용 프로그램템플릿 차례로 클릭한 다음 확인 을 누릅니다.
    4. 솔루션 탐색기에서 Module1.vb를 파일을 DistributedTransaction.vb로 이름을 바꿉니다.
  2. DistributedTransaction.vb 파일에서 모든 코드를 삭제하십시오.
  3. 프로젝트 메뉴에서 참조 추가 클릭한 다음 참조 추가:
    • System.EnterpriseServices
    • System.Data.dll

  4. DistributedTransaction.vb 파일에 다음 코드를 추가하여:
    Imports System
    Imports System.Data.SqlClient
    Imports System.EnterpriseServices
    Imports System.Runtime.CompilerServices
    Imports System.Reflection
    
    <Assembly: ApplicationName("DistributedTransaction")> 
    <Assembly: AssemblyKeyFileAttribute("..\..\DistributedTransaction.snk")> 
    
    
    Namespace DistributedTransaction
    
        '<summary>
        'Summary description for Class1.
        '</summary>
        Module Module1
            '<summary>
            'The main entry point for the application.
            '</summary>
            <STAThread()> Sub Main()
                Try
                    Dim myDistributedTran As New DistributedTran()
                    myDistributedTran.TestDistributedTransaction()
                Catch e As System.Data.SqlClient.SqlException
                    System.Console.WriteLine("Transaction Aborted: Error returned: " + e.Message)
                End Try
            End Sub
        End Module
    
        '<summary>
        'Summary description for TestApp.
        '</summary>
        <Transaction(TransactionOption.Required)> Public Class DistributedTran
            Inherits ServicedComponent
    
            Public Sub DistributedTran()
            End Sub
    
            <AutoComplete()> Public Function TestDistributedTransaction() As String
    
    
                'The following Insert statement goes to the first server.
                'This Insert statement does not produce any errors. 
                Dim insertCmdSql As String = "Insert Into TestTransaction (Col1, Col2) Values (1,'Sql Test')"
    
                'The following Delete statement goes to the second server.
                'Because the table does not exist, this code throws an exception. 
                Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"
    
                'The following connection strings create instances of two SqlConnection objects
                'to connect to two different SQL Server servers in your environment.
                'Modify the connection strings as necessary for your environment.
                Dim SqlConn1 As New SqlConnection("Server=Name_of_Server1;uid=User_Id;database=DatabaseName;pwd=Password")
                Dim SqlConn2 As New SqlConnection("Server=Name_of_Server2;uid=User_Id;database=DatabaseName;pwd=Password")
    
                Try
                    Dim insertCmd As New SqlCommand(insertCmdSql, SqlConn1)
                    Dim exceptionCausingCmd As New SqlCommand(exceptionCausingCmdSQL, SqlConn2)
    
                    'This command should run properly.
                    insertCmd.Connection.Open()
                    insertCmd.ExecuteNonQuery()
    
                    'This command results in an exception, which automatically rolls back
                    'the first command (the insertCmd command).
                    exceptionCausingCmd.Connection.Open()
                    Dim cmdResult As Integer = exceptionCausingCmd.ExecuteNonQuery()
    
                    SqlConn1.Close()
                    SqlConn2.Close()
    
                    Console.WriteLine("Hello")
    
                Catch ex As System.Data.SqlClient.SqlException
    
                    'After you catch the exception in this function, throw it.
                    'The service component receives this exception and aborts the
                    'transaction. The service component then throws the same exception,
                    'and the calling function receives the error message.
                    Console.WriteLine(ex.Message)
                    Throw (ex)
    
                Finally
    
                    'Close the connection.
                    If SqlConn1.State.ToString() = "Open" Then
                        SqlConn1.Close()
                    End If
    
                    If SqlConn2.State.ToString() = "Open" Then
                        SqlConn2.Close()
                    End If
    
                End Try
    
                Return "Success"
    
            End Function
    
        End Class
    End Namespace 
    					
  5. 파일 메뉴에서 모두 저장 을 클릭하십시오.
  6. 시작 을 누르고, 프로그램, Visual Studio .NET, Visual Studio .NET 도구 차례로 가리킨 다음 Visual Studio .NET 명령 프롬프트 를 클릭하십시오.
  7. 프로젝트에 들어 있는 폴더를 열고 강력한 이름으로 어셈블리를 서명하려면 다음 명령을 실행하십시오.
    sn - k DistributedTransaction.snk
  8. 응용 프로그램을 빌드하십시오.
  9. 다음 표에서는 첫 번째 SQL Server 서버를 만듭니다:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestTransaction]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[TestTransaction]
    GO
    
    CREATE TABLE [dbo].[TestTransaction] (
    	[Col1] [int] NULL ,
    	[Col2] [varchar] (100) NULL 
    ) ON [PRIMARY]
    GO 
    					
  10. 응용 프로그램을 실행하십시오. 예상되는 동작은 되는 다음과 같은 오류 메시지가 나타납니다.
    트랜잭션이 중단되었습니다: 반환된 오류: 잘못된 개체 이름 'NonExistentTable'.
  11. SQL Server 쿼리 분석기를 열고 다음 코드를 추가하여 다음 쿼리를 실행하려면 F5 키를 눌러:
    USE NORTHWIND;
    SELECT * FROM TestTransaction WHERE Col1=1 AND Col2='Sql Test'
    						
    쿼리를 트랜잭션이 중단되었습니다 때문에 행을 반환하지 않도록 유의하십시오.
  12. 다음 코드는 VBA 프로젝트의 찾습니다:
    Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"
    						
    트랜잭션을 중단할 수 일으키지 않는 유효한 쿼리 SQL 문을 바꿉니다. 예를 들어,:
    Dim exceptionCausingCmdSQL As String = "Select @@Identity from customers"
    					
  13. 컴파일할 응용 프로그램을 다시 실행하려면 F5 키를 눌러.
  14. 명령을 쿼리 분석기에서 단계의 11 다시 실행하십시오. 트랜잭션이 성공적으로 완료할 수 있었기 때문에 행을 반환하는 쿼리를 확인.
NOTES:
  • 이 예제는 오류 처리를 수행하지 않습니다.
  • SQL Server 및 Microsoft 분산 트랜잭션 코디네이터 MS DTC) 모든 클라이언트와 서버를 실행하고 있어야 합니다.

참조

자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
312902방법: Visual Basic .NET 서비스 대상된 .NET 구성 요소 만들기

속성

기술 자료: 316627 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 2.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft .NET Framework 서비스 팩 2
  • Microsoft Enterprise Services (included with the .NET Framework 1.1)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
키워드:?
kbnosurvey kbarchive kbmt kbcompiler kbhowtomaster kbsqlclient kbsystemdata KB316627 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com