NASıL YAPıLıR: Visual Basic. NET'te ServicedComponent kullanarak bir .NET sağlayıcısı ile dağıtılmış bir işlem gerçekleştirin...

Makale çevirileri Makale çevirileri
Makale numarası: 316627 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, ServicedComponent sınıfıyla .NET Sağlayıcısı'nı kullanarak bir dağıtılmış işlem gerçekleştirmek gösterilmiştir. Bu makalede bir Microsoft SQL Server sunucusunda SqlClient .NET sağlayıcı kullansa da, ODBC veya OLE DB .NET yönetilen sağlayıcı da kullanabilirsiniz.

Gereksinimler

Aşağıdaki listede, gereksinim duyulan donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server
  • Microsoft Visual Studio. NET'i
  • Microsoft SQL Server 7.0 veya SQL Server 2000

GENEL BAKIŞ

Bunu yapmak için sınıf hazırlamanız durumunda, .NET Framework sınıfının örnekleri otomatik harekette katılabilirsiniz. Sınıf örneğinin veya bir nesne erişen her kaynak için hareket kaydeder. Örneğin, bir nesne money veritabanındaki bir hesapta deftere nakletmek için ADO.NET kullanıyorsa, kaynak yöneticisi veritabanı için nesnenin bir işlemde çalışıp çalışmayacağını belirler. Nesnenin bir işlemde çalışacağını, kaynak yöneticisi, işlemin veritabanında otomatik olarak kaydeder.

Otomatik harekette katılmak üzere sınıf hazırlamak için aşağıdaki işlemi kullan:
  1. TransactionAttribute sınıfı, sınıfınıza bileşen istekleri otomatik olarak hareket tipini belirtmek için geçerlidir.

    Hareket türü TransactionOption numaralama üyesi olması gerekir. Örneğin:
    <Transaction(TransactionOption.Required)> Public Class Bar
       Inherits ServicedComponent
       '. . .
    End Class
    					
  2. Kullanacağınız sınıf ServicedComponent sınıfından türevi. ServicedComponent COM + hizmetlerini kullanan tüm sınıfların taban sınıftır.
  3. Derleme için benzersiz bir anahtar çifti içerdiğini emin olmak için derleme kesin adı ile oturum açın.
  4. Bilgisayarınızı sınıfıyla COM + kataloğunu içeren derlemeye kaydedin.

    Not: kendi sınıfının bir örneği çağıran istemci, ortak dil çalışma zamanı tarafından yönetiliyor, kayıt için gerçekleştirilir. Yönetilmeyen bir arayanın oluşturur ve kullanacağınız sınıf örneklerini arar, bu adım gereklidir. .NET Hizmetleri yükleme Aracı'nı (regsvcs.exe) el ile derleme kaydetmek için kullanın.
Nasıl yapılır: Derleme bir kesin adla oturum hakkında daha fazla bilgi için Microsoft .NET Framework Geliştirici Kılavuzu'nda aşağıdaki konuya bakın:
Güçlü bir adı olan bir derleme imzalama
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconassigningassemblystrongname.asp
Bu işlem hakkında daha fazla bilgi için .NET Framework Geliştirici Kılavuzu'nda aşağıdaki konuya bakın:
Otomatik işlemler ve .NET Framework sınıfları
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconautomatictransactionsnetframeworkclasses.asp

Proje oluşturma

  1. Visual Basic. NET'te yeni bir konsol uygulaması) projesi oluşturmak için şu adımları izleyin:
    1. Visual Studio .NET'i başlatın.
    2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın.
    3. Yeni proje) iletişim kutusunda, Project Types altında Visual Basic Projects ' ı tıklatın, şablonları altında Console Application ' ı tıklatın ve sonra Tamam ' ı tıklatın.
    4. Solution Explorer'da, Module1.vb dosyayı DistributedTransaction.vb yeniden adlandırın.
  2. Tüm kod DistributedTransaction.vb dosyasından silin.
  3. Proje menüsünde Add Reference ' ı tıklatın ve sonra da aşağıdaki başvuru ekleyin:
    • System.EnterpriseServices'ı
    • System.Data.dll

  4. Aşağıdaki kodu DistributedTransaction.vb dosyasına ekleyin:
    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. Dosya menüsünde Tümünü Kaydet'i tıklatın.
  6. Başlat ' ı tıklatın, Programlar ' ın üzerine gelin, Visual Studio.NET ' i işaretleyin, Visual Studio .NET araçları ' nın üzerine gelin ve Visual Studio .NET komut istemi ' ni tıklatın.
  7. Projeyi içeren klasörü açın ve sonra derleme kesin adı ile oturum açmak için aşağıdaki komutu çalıştırın:
    sn DistributedTransaction.snk -k
  8. Uygulamanızı oluşturun.
  9. Aşağıdaki tablo ilk SQL Server sunucusuna oluşturun:
    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. Uygulamanızın çalıştırın. Dikkat edin (Bu, beklenen davranıştır) aşağıdaki hata iletisini alırsınız:
    Işlem iptal edildi: Hata döndürdü: ınvalid object name 'NonExistentTable'.
  11. SQL Server Query Analyzer'ı açın, aşağıdaki kodu ekleyin ve sonra sorgulamayı çalıştırmak için F5 tuşuna basın:
    USE NORTHWIND;
    SELECT * FROM TestTransaction WHERE Col1=1 AND Col2='Sql Test'
    						
    işlem iptal edildi çünkü sorgu satırlar döndürmeyen unutmayın.
  12. Visual Basic projenizde aşağıdaki kodu bulun:
    Dim exceptionCausingCmdSQL As String = "Delete from NonExistentTable"
    						
    ve hareketi iptal neden geçerli bir sorgunun SQL deyimini değiştirmek. Örneğin:
    Dim exceptionCausingCmdSQL As String = "Select @@Identity from customers"
    					
  13. Derlemeye ve uygulamayı yeniden çalıştırmak için F5 tuşuna basın.
  14. Komut adım 11'de, Query Analyzer'ı yeniden çalıştırın. Sorgu olduğundan işlem başarıyla tamamlanması için bir satır döndüren dikkat edin.
Notlar:
  • Bu örnekte, hata işleme gerçekleştirmez.
  • SQL Server ve Microsoft Distributed Transaction Coordinator (MS DTC) tüm istemcilere ve sunuculara çalıştırıyor olmanız gerekir.

Referanslar

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
312902NASıL YAPıLıR: Visual Basic. NET'te bir servis verilen .NET bileşeni oluşturma

Özellikler

Makale numarası: 316627 - Last Review: 24 Şubat 2014 Pazartesi - Gözden geçirme: 2.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft .NET Framework Service Pack 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
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbcompiler kbhowtomaster kbsqlclient kbsystemdata KB316627 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:316627

Geri Bildirim Ver

 

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