Cum acționez MSDTC pe serverul SQL?

Este chiar o întrebare validă? Am o aplicație .NET Windows care utilizează MSTDC și aruncă o excepție:

System.Transactions.TransactionManagerCommunicationException: Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration for MSDTC using the Component Services Administrative tool ---> System.Runtime.InteropServices.COMException (0x8004D024): The transaction manager has disabled its support for remote/network transactions. (Exception from HRESULT: 0x8004D024) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)....

Am urmat ghidul Kbalertz pentru a activa MSDTC de pe PC-ul pe care este instalată aplicația , dar eroarea continuă să apară.

Mă întrebam dacă a fost o problemă de bază de date? Dacă da, cum o pot rezolva?

0
fr hi bn
Dacă soluțiile menționate nu rezolvă problema, verificați acest link
adăugat autor Shahab J, sursa

6 răspunsuri

Aveți chiar nevoie de MSDTC? Escaladarea pe care o întâmpinați este adesea cauzată de crearea mai multor conexiuni într-un singur TransactionScope.

Dacă aveți nevoie de aceasta, atunci trebuie să o activați așa cum este prezentat în mesajul de eroare. Pe XP:

  • Go to Administrative Tools -> Component Services
  • Expand Component Services -> Computers ->
  • Right-click -> Properties -> MSDTC tab
  • Hit the Security Configuration button
0
adăugat
Vă mulțumim pentru comentariul despre eroarea cauzată de crearea mai multor conexiuni într-un singur TransactionScope. Am primit eroarea și asta a fost exact problema. Nu am vrut să folosesc MSDTC, așa că am găsit conexiunea nouă errant și reutilizată una deja existentă. Mulțumiri!
adăugat autor Jim McKeeth, sursa
1) Faceți clic dreapta pe DTC Local și alegeți proprietăți 2) Deschideți fila de securitate 3) Verificați cel puțin accesul la DTC în rețea, Permiteți clienților la distanță și Permiteți accesul.
adăugat autor Rob Sedgwick, sursa
Sunt pe ferestrele 7 și 8 și există doar o secțiune "Coordonator implicit". Unde pot ajunge la configurația de securitate despre care vorbești?
adăugat autor qdev76, sursa
Urmați acest link de mai jos: stackoverflow.com/a/27263904/192131
adăugat autor Tola Odejayi, sursa
De asemenea, în firewall-ul Windows am deschis portul 135 TCP și am adăugat c: \ windows \ msdtc.exe ca o excepție
adăugat autor Sameer, sursa

@Dan,

Nu am nevoie de msdtc activat pentru   tranzacțiile pentru a lucra?

Numai tranzacții distribuite - Acelea care implică mai mult decât o singură conexiune. Asigurați-vă de două ori că vă deschideți o singură conexiune în cadrul tranzacției și că nu va escalada - Performanța va fi și mai bună.

0
adăugat
Nu am nevoie de msdtc activat pentru ca tranzacțiile să funcționeze? În orice caz, mai multe conexiuni nu se fac în măsura în care știu. Am executat deja acești pași pe PC-ul clientului, spui că ar trebui să fac și acești pași pe serverul de bază de date?
adăugat autor Dan, sursa
@ Nu aveți obligația de a activa DTC dacă utilizați tranzacții ado.net. Sunteți obligat să activați MSDTC pe server numai dacă utilizați tranzacții distribuite
adăugat autor Niraj, sursa

MSDTC must be enabled on both systems, both server and client.
Also, make sure that there isn't a firewall between the systems that blocks RPC.
DTCTest is a nice litt app that helps you to troubleshoot any other problems.

0
adăugat
ww2.sqldev.net/?folio=7POYGN0G2 nu a fost găsit DTCTest.
adăugat autor Kiquenet, sursa
adăugat autor Air2, sursa

De asemenea, puteți vedea aici despre cum să activați MSDTC din Control Panel services.msc.

On the server where the trigger resides, you need to turn the MSDTC service on. You can this by clicking START > SETTINGS > CONTROL PANEL > ADMINISTRATIVE TOOLS > SERVICES. Find the service called 'Distributed Transaction Coordinator' and RIGHT CLICK (on it and select) > Start.

0
adăugat

I've found that the best way to debug is to use the microsoft tool called DTCPing

  1. Copy the file to both the server (DB) and the client (Application server/client pc)
    • Start it at the server and the client
    • At the server: fill in the client netbios computer name and try to setup a DTC connection
    • Restart both applications.
    • At the client: fill in the server netbios computer name and try to setup a DTC connection

Am avut problema mea de probleme în vechea noastră rețea de companii și am câteva sfaturi:

  • if you get the error message "Gethostbyname failed" it means the computer can not find the other computer by its netbios name. The server could for instance resolve and ping the client, but that works on a DNS level. Not on a netbios lookup level. Using WINS servers or changing the LMHOST (dirty) will solve this problem.
  • if you get an error "Acces Denied", the security settings don't match. You should compare the security tab for the msdtc and get the server and client to match. One other thing to look at is the RestrictRemoteClients value. Depending on your OS version and more importantly the Service Pack, this value can be different.
  • Other connection problems:
    • The firewall between the server and the client must allow communication over port 135. And more importantly the connection can be initiated from both sites (I had a lot of problems with the firewall people in my company because they assumed only the server would open an connection on to that port)
    • The protocol returns a random port to connect to for the real transaction communication. Firewall people don't like that, they like to restrict the ports to a certain range. You can restrict the RPC dynamic port generation to a certain range using the keys as described in How to configure RPC dynamic port allocation to work with firewalls.

Din experiența mea, dacă DTCP-ul poate configura o conexiune DTC inițiată de la client și inițiată de la server, tranzacțiile dvs. nu mai sunt problema.

0
adăugat

Utilizați acest lucru pentru Windows Server 2008 r2 și Windows Server 2012 R2

    Faceți clic pe Start , dați clic pe Executare , tastați dcomcnfg > Servicii Componente .

  1. În copacul consolei, faceți clic pe Componente servicii , faceți clic pe Computere , faceți clic pe Computerul meu ; pentru a extinde Coordonatorul distribuit de tranzacții , apoi faceți clic pe DTC local .

  2. Faceți clic dreapta pe DTC local și dați clic pe Proprietăți pentru a afișa caseta de dialog Proprietăți locale DTC . >

  3. Faceți clic pe fila Securitate .

  4. Bifați marca caseta de selectare "Acces DTC în rețea" .

  5. În cele din urmă, bifați casetele "Permiteți accesarea"

  6. Faceți clic pe Aplicați , OK .

  7. Va ​​apărea un mesaj despre reînceperea serviciului.

  8. Faceți clic pe OK și pe Asta e tot.

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

Note: Sometimes the network firewall on the Local Computer or the Server could interrupt your connection so make sure you create rules to "Allow Inbound" and "Allow Outbound" connection for c:\windows\msdtc.exe

0
adăugat
@jonazu acum am răspuns actualizat și pentru Windows Server 2012 R2 :)
adăugat autor Shiv Singh, sursa
Funcționează și pentru Windows Server 2012 R2. Vă mulțumim pentru instrucțiunile clare. N-aș fi găsit niciodată singur!
adăugat autor jonazu, sursa
Bună treabă ShivSingh!
adăugat autor Super Coder, sursa