MSDTC'yi SQL Server'da nasıl etkinleştiririm?


106

Bu bile geçerli bir soru mu? MSTDC kullanan bir .NET Windows uygulamam var ve bir istisna oluşturuyor:

System.Transactions.TransactionManagerCommunicationException: Dağıtılmış İşlem Yöneticisi (MSDTC) için ağ erişimi devre dışı bırakıldı. Lütfen Bileşen Hizmetleri Yönetim aracını kullanarak MSDTC için güvenlik yapılandırmasında ağ erişimi için DTC'yi etkinleştirin ---> System.Runtime.InteropServices.COMException (0x8004D024): İşlem yöneticisi uzak / ağ işlemleri için desteğini devre dışı bıraktı. (HRESULT istisnası: 0x8004D024) System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, IT & transactionIdentifier, OletxTransactionIsolationLevelationLevelationLevelation

Uygulamanın yüklü olduğu bilgisayarda MSDTC'yi etkinleştirmek için Kbalertz kılavuzunu takip ettim , ancak hata hala devam ediyor.

Bunun bir veritabanı sorunu olup olmadığını merak ediyordum? Öyleyse, bunu nasıl çözebilirim?


Bahsedilen çözümler sorunu çözmezse, şu bağlantıyı
Shahab J

Yanıtlar:


127

Bunu Windows Server 2008 r2 ve Windows Server 2012 R2 için kullanın

  1. Başlat'a tıklayın , Çalıştır'a tıklayın , dcomcnfg yazın ve ardından Bileşen Hizmetleri'ni açmak için Tamam'a tıklayın .

  2. Konsol ağacında, genişletmek için tıklayın Bileşen Hizmetleri , genişletmek için tıklayın Bilgisayarlar , genişletmek için tıklayın My Computer , genişletmek için tıklayın Dağıtılmış İşlem Koordinatörü ve ardından Yerel DTC .

  3. Yerel DTC'ye sağ tıklayın ve Yerel DTC Özellikleri iletişim kutusunu görüntülemek için Özellikler'e tıklayın .

  4. Click Güvenlik sekmesini.

  5. İşareti kontrol "Ağ DTC Erişim" onay kutusunu.

  6. Son olarak, "Gelene İzin Ver" ve "Giden'e İzin Ver" onay kutularını işaretleyin.

  7. Uygula , Tamam'ı tıklayın .

  8. Hizmetin yeniden başlatılmasıyla ilgili bir mesaj açılacaktır .

  9. Click OK ve Hepsi bu.

Referans: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Not: Yerel Bilgisayar veya Server Bazen ağ güvenlik duvarı böylece kurallar oluşturması emin olun bağlantınızı kesmek olabilir "Gelene izin ver" ve "Giden izin ver" için bağlantıC:\Windows\System32\msdtc.exe


Windows Server 2012 R2 için de çalışır. Açık talimatlar için teşekkürler. Bunu kendi başıma asla bulamazdım!
jonazu

@jonazu şimdi Windows Server 2012 R2 için de yanıtı güncelledim :)
Shiv Singh

İyi iş ShivSingh!
Super Coder

Doğru yol msdtc.exeşudur:c:\windows\system32\msdtc.exe
firepol

1
Bu özelliklerin, en azından kümelenmiş Sunucu 2016 düğümlerinde, UI aracılığıyla ayarlandığında yapışmamasına neden olan bir hata var gibi görünüyor. Çözelti kayıt defterinde elle bu özellikleri belirlemektir: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security. Burada mülklerle ilgili daha fazla bilgi .
Paul

102

MSDTC'ye ihtiyacınız var mı? Karşılaştığınız yükselme genellikle tek bir TransactionScope içinde birden çok bağlantı oluşturmaktan kaynaklanır.

İhtiyacınız olursa, hata mesajında ​​belirtildiği gibi etkinleştirmeniz gerekir. XP'de:

  • Yönetimsel Araçlar -> Bileşen Hizmetleri'ne gidin
  • Bileşen Hizmetleri'ni genişletin -> Bilgisayarlar ->
  • Sağ tıklayın -> Özellikler -> MSDTC sekmesi
  • Güvenlik Yapılandırması düğmesine basın

2
Ayrıca Windows güvenlik duvarında 135 TCP bağlantı noktasını açtım ve istisna olarak c: \ windows \ msdtc.exe'yi ekledim
Sameer

20
Tek bir TransactionScope içinde birden çok bağlantı oluşturmanın neden olduğu hata hakkındaki yorumunuz için teşekkür ederiz. Hatayı alıyordum ve tam olarak sorun buydu. MSDTC'yi kullanmak istemedim, bu yüzden hatalı yeni bağlantıyı buldum ve mevcut olanı yeniden kullandım. Teşekkürler!
Jim McKeeth

10
Windows 7 ve 8'deyim ve yalnızca bir "Varsayılan Koordinatör" bölümü var. Bahsettiğiniz güvenlik yapılandırmasına nereden ulaşabilirim?
qdev76

2
1) Yerel DTC'ye sağ tıklayın ve özellikleri seçin 2) Güvenlik sekmesini açın 3) En azından Ağ DTC Erişimini Kontrol Edin, Uzak İstemcilere İzin Verin ve Gelenlere İzin Verin.
Rob Sedgwick

19

Hata ayıklamanın en iyi yolunun DTCPing adlı Microsoft aracını kullanmak olduğunu buldum

  1. Dosyayı hem sunucuya (DB) hem de istemciye (Uygulama sunucusu / istemci bilgisayarı) kopyalayın
    • Sunucuda ve istemcide başlatın
    • Sunucuda: istemci netbios bilgisayar adını girin ve bir DTC bağlantısı kurmayı deneyin
    • Her iki uygulamayı da yeniden başlatın.
    • İstemcide: sunucu netbios bilgisayar adını girin ve bir DTC bağlantısı kurmayı deneyin

Eski şirket ağımızda çok sayıda sorun yaşadım ve birkaç ipucum var:

  • "Gethostbyname başarısız oldu" hata mesajını alırsanız bu, bilgisayarın diğer bilgisayarı netbios adıyla bulamadığı anlamına gelir . Sunucu, örneğin istemciyi çözebilir ve ping atabilir, ancak bu bir DNS düzeyinde çalışır. Netbios arama düzeyinde değil. WINS sunucularını kullanmak veya LMHOST'u (kirli) değiştirmek bu sorunu çözecektir.
  • "Erişim Reddedildi" hatası alırsanız, güvenlik ayarları eşleşmez. Msdtc için güvenlik sekmesini karşılaştırmalı ve sunucu ile istemcinin eşleşmesini sağlamalısınız. Bakılması gereken diğer bir şey de RestrictRemoteClients değeridir. İşletim sistemi sürümünüze ve daha da önemlisi Hizmet Paketine bağlı olarak bu değer farklı olabilir.
  • Diğer bağlantı sorunları:
    • Sunucu ve istemci arasındaki güvenlik duvarı, 135 numaralı bağlantı noktası üzerinden iletişime izin vermelidir. Ve daha da önemlisi, bağlantı her iki siteden de başlatılabilir (Şirketimdeki güvenlik duvarı çalışanlarıyla birçok sorun yaşadım çünkü yalnızca sunucunun bir bağlantı açacağını varsaydılar. o limana)
    • Protokol, gerçek işlem iletişimi için bağlanmak üzere rastgele bir bağlantı noktası döndürür. Güvenlik duvarı insanları bundan hoşlanmaz, bağlantı noktalarını belirli bir aralıkla sınırlamayı severler. RPC dinamik bağlantı noktası tahsisini güvenlik duvarlarıyla çalışacak şekilde yapılandırma konusunda açıklandığı gibi, anahtarları kullanarak RPC dinamik bağlantı noktası oluşturmayı belirli bir aralıkla sınırlandırabilirsiniz .

Deneyimlerime göre, DTCPing istemciden başlatılan ve sunucudan başlatılan bir DTC bağlantısı kurabilirse, işlemleriniz artık sorun değildir.


6

Ayrıca , Kontrol Panelinin services.msc'den MSDTC'nin nasıl açılacağını da burada görebilirsiniz .

Tetikleyicinin bulunduğu sunucuda, MSDTC hizmetini açmanız gerekir. Bunu BAŞLAT> AYARLAR> KONTROL PANELİ> YÖNETİCİ ARAÇLARI> HİZMETLER'e tıklayarak yapabilirsiniz. 'Dağıtılmış İşlem Koordinatörü' ve SAĞ TIKLAYIN (üzerinde ve seçin)> Başlat adlı hizmeti bulun.



4

@Dan,

İşlemlerin çalışması için msdtc'nin etkinleştirilmesine ihtiyacım yok mu?

Yalnızca dağıtılmış işlemler - Birden fazla bağlantı içerenler. İşlem içinde yalnızca tek bir bağlantı açtığınızdan ve bu bağlantı artmayacağından iki kez emin olun - Performans da çok daha iyi olacak.


İşlemlerin çalışması için msdtc'nin etkinleştirilmesine ihtiyacım yok mu? Her iki durumda da, bildiğim kadarıyla birden fazla bağlantı yapılmıyor. Bu adımları zaten istemci bilgisayarda çalıştırdım, bu adımları veritabanı sunucusunda da yapmam gerektiğini mi söylüyorsunuz?
Dan

@Dan, ado.net işlemlerini kullanıyorsanız DTC'yi etkinleştirmeniz gerekmez. Yalnızca Dağıtılmış işlemleri kullanıyorsanız sunucuda MSDTC'yi etkinleştirmeniz gerekir
Niraj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.