Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: .NET Framework
.NET
.NET Standard
İşlem, diğer şeylerin yanı sıra birim olarak başarılı (işleme) veya başarısız olan (iptal) ilgili görevler kümesidir. Dağıtılmış işlem, birkaç kaynağı etkileyen bir işlemdir. Dağıtılmış bir işlemin işlenmesi için tüm katılımcıların verilerde yapılan değişikliklerin kalıcı olacağını garanti etmesi gerekir. Sistem kilitlenmelerine veya diğer öngörülemeyen olaylara rağmen değişikliklerin kalıcı olması gerekir. Tek bir katılımcı bile bu garantiyi veremezse, işlemin tamamı başarısız olur ve işlem kapsamındaki verilerde yapılan değişiklikler geri alınır.
Uyarı
Azure SQL Database ve Azure SQL Managed Instance'daki dağıtık işlemler hakkında bilgi için Bulut veritabanları arasında dağıtılmış işlemler sayfasına bakınız.
System.Transactions ile Çalışma
.NET'te, dağıtılmış işlemler ad alanında System.Transactions API aracılığıyla yönetilir. API, System.Transactions birden çok kalıcı kaynak yöneticisi söz konusu olduğunda dağıtılmış işlem işlemeyi Microsoft Dağıtılmış İşlem Düzenleyicisi (MS DTC) gibi bir işlem izleyicisine devredecektir. Daha fazla bilgi için bkz. İşlem Temelleri.
ADO.NET 2.0, bir bağlantıyı Transaction örneğinde listeleyen EnlistTransaction yöntemini kullanarak dağıtılmış bir işleme kayıt olma desteği sunar. ADO.NET'in önceki sürümlerinde, dağıtılmış işlemlere açık katılma geriye dönük uyumluluk için desteklenen bir EnlistDistributedTransaction bağlantı yönteminin kullanılmasıyla, bir bağlantının bir ITransaction örneğine kaydedilmesiyle gerçekleştirildi. Enterprise Services işlemleri hakkında daha fazla bilgi için bkz. Enterprise Services ile Birlikte Çalışabilirlik ve COM+ İşlemleri.
Microsoft SqlClient Veri Sağlayıcısı ile SQL Server için bir SQL Server veritabanında bir System.Transactions işlem kullanılırken, otomatik olarak hafif bir Transaction kullanılacaktır. İşlem daha sonra gerektiğinde tam dağıtılmış bir işleme yükseltilebilir. Daha fazla bilgi için bkz. SQL Server ile System.Transactions tümleştirmesi.
Dağıtılmış bir işlemde otomatik olarak kaydolma
Otomatik kaydetme, System.Transactions ile ADO.NET bağlantılarını tümleştirmenin varsayılan (ve tercih edilen) yoludur. Bir bağlantı nesnesi, bir işlemin etkin olduğunu belirlerse( yani null olmadığı anlamına gelirSystem.Transaction) var olan bir dağıtılmış işlemde Transaction.Current otomatik olarak listeye eklenir. Otomatik işlem kaydı, bağlantı açıldığında gerçekleşir. İşlem kapsamının içinde bir komut yürütülse bile bundan sonra gerçekleşmez. Mevcut işlemlerde otomatik kayıt işlemini, bir bağlantı nesnesi için bağlantı dizesi parametresi olarak Enlist=false belirterek SqlConnection.ConnectionString devre dışı bırakabilirsiniz.
Dağıtılmış bir işleme el ile katılım sağlama
Otomatik listeleme devre dışı bırakıldıysa veya bağlantı açıldıktan sonra başlatılan bir işlemi listelemeniz gerekiyorsa, SQL Server için Microsoft SqlClient Veri Sağlayıcısı nesnesinin EnlistTransaction yöntemini kullanarak SqlConnection mevcut bir dağıtılmış işleme kaydolabilirsiniz. Mevcut bir dağıtılmış işlemde listeleme, işlem işlenirse veya geri alınırsa, veri kaynağındaki kod tarafından yapılan değişikliklerin de işlenmesini veya geri alınmasını sağlar.
Uyarı
DataReader başlatıldığında işlem etkinken bir işlemi işlemeye veya geri almaya çalışırsanız, bir özel durum ("exception") fırlatılır.
Dağıtılmış işlemlere kayıt olmak, özellikle iş nesnelerinin havuza alınması sırasında geçerlidir. Bir iş nesnesi açık bir bağlantıyla havuzlanmışsa, otomatik işlem kaydı yalnızca o bağlantı açıldığında gerçekleşir. Birden çok işlem havuza alınmış iş nesnesi kullanılarak gerçekleştirildiğinde, bu nesnenin aktif bağlantısı, yeni başlatılan işlemlere otomatik olarak katılmaz. Bu durumda, bağlantı için otomatik işlem kaydını devre dışı bırakabilir ve EnlistTransaction kullanarak bağlantıyı işlemlere kaydedebilirsiniz.
EnlistTransaction , mevcut işleme bir referans olan Transaction türünde tek bir bağımsız değişken alır. Bağlantının yöntemini çağırdıktan sonra, bağlantı EnlistTransaction kullanılarak veri kaynağında yapılan tüm değişiklikler işleme dahil edilir. Null bir değer geçirilmesi, bağlantıyı geçerli dağıtılmış işlem listesinden kaldırır. çağrısından EnlistTransactionönce bağlantının açılması gerektiğini unutmayın.
Uyarı
Bir bağlantı açıkça bir işlemde listelendikten sonra, ilk işlem bitene kadar listeden çıkarılamaz veya başka bir işlemde listelenemez.
Dikkat
EnlistTransaction, bağlantının BeginTransaction yöntemini kullanarak bağlantı zaten bir işlem başlattıysa bir özel durumu fırlatır. Ancak, işlem veri kaynağında başlatılan bir yerel işlemse (örneğin, BEGIN TRANSACTION deyimini açıkça kullanarak SqlCommandyürütmek), EnlistTransaction yerel işlemi geri alır ve istenen şekilde mevcut dağıtılmış işleme kaydolır. Yerel işlemin geri alındığına ve kullanılarak BeginTransactionbaşlatılmayan yerel işlemleri yönetmesi gerektiğine dair bildirim almazsınız. SQL Server için Microsoft SqlClient Veri Sağlayıcısı'nı SQL Server ile kullanıyorsanız, listeye ekleme girişimi bir özel durum oluşturur. Diğer tüm durumlar tespit edilmeden kalacak.
SQL Server'da terfi edilebilir işlemler
SQL Server, yerel basit bir işlemin otomatik olarak dağıtılmış bir işleme yükseltilebildiği yükseltilebilir işlemleri yalnızca gerekli olduğunda destekler. Yükseltilebilir bir işlem, eklenen ek yük gerekmediği sürece dağıtılmış bir işlemin ek yükünü çağırmaz. Daha fazla bilgi ve kod örneği için bkz. SQL Server ile System.Transactions tümleştirmesi.
Dağıtılmış İşlemleri Yapılandırma
Dağıtılmış işlemleri kullanmak için ağ üzerinden MS DTC'yi etkinleştirmeniz gerekebilir. Sunucunun yerel Windows Güvenlik Duvarı etkinse, MS DTC hizmetinin ağı kullanmasına veya MS DTC bağlantı noktasını açmasına izin vermelisiniz.
Ayrıca bakınız
- İşlemler ve eşzamanlılık
- SQL Server ile System.Transactions tümleştirmesi
- SQL Server için Microsoft ADO.NET