2008-08-11 13 views
84

Ist das überhaupt eine gültige Frage? Ich habe eine .NET-Windows-Anwendung, die MSTDC verwendet, und es wirft eine Ausnahme:Wie aktiviere ich MSDTC auf SQL Server?

System.Transactions.TransactionManagerCommunicationException: Netzzugang für Distributed Transaction Manager (MSDTC) wurde deaktiviert. Bitte aktivieren Sie DTC für Netzwerkzugriff in der Sicherheitskonfiguration für MSDTC mit dem Component Services-Verwaltungstool ---> System.Runtime.InteropServices.COMException (0x8004D024): Der Transaktionsmanager hat seine Unterstützung für remote/Netzwerk Transaktionen deaktiviert. (Ausnahme von HRESULT: 0x8004D024) bei System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevel & isolation, ITransactionShim & transactionShim) ....

Ich folgte the Kbalertz guide to enable MSDTC auf dem PC, auf dem die App installiert ist, aber der Fehler tritt immer noch auf.

Ich fragte mich, ob dies ein Datenbankproblem war? Wenn ja, wie kann ich es lösen?

+0

Wenn die genannten Lösungen das Problem nicht lösen, überprüfen Sie [diesen Link] (http://stackoverflow.com/questions/10346367/mvc-3-the-msdtc-transact ion-manager-war-unfähig, die-transaktion-from-th-zu ziehen) –

Antwort

3

MSDTC muss auf beiden Systemen, Server und Client, aktiviert sein.
Stellen Sie außerdem sicher, dass zwischen den Systemen, die RPC blockieren, keine Firewall vorhanden ist.
DTCTest ist eine nette kleine App, die Ihnen hilft, andere Probleme zu beheben.

+0

http://ww2.sqldev.net/?folio=7POYGN0G2 nicht gefunden DTCTest. – Kiquenet

93

Benötigen Sie MSDTC? Die Eskalation, die Sie feststellen, wird häufig durch das Erstellen mehrerer Verbindungen in einem einzelnen TransactionScope verursacht.

Wenn Sie es brauchen, müssen Sie es wie in der Fehlermeldung beschrieben aktivieren. Auf XP:

  • Zur Verwaltung -> Komponentendienst
  • Erweitern Sie Komponentendienste -> Computer ->
  • Rechtsklick -> Eigenschaften -> Registerkarte MSDTC
  • Hit der Sicherheitskonfigurations-Taste
+2

Auch in der Windows-Firewall habe ich Port 135 TCP geöffnet und c: \ windows \ msdtc.exe als Ausnahme hinzugefügt – Sameer

+18

Danke für den Kommentar über den Fehler, der durch das Erstellen mehrerer Verbindungen in einem einzigen TransactionScope verursacht wird. Ich habe den Fehler bekommen und das war genau das Problem.Ich wollte die MSDTC nicht verwenden, daher fand ich die fehlerhafte neue Verbindung und verwendete eine vorhandene erneut. Vielen Dank! –

+10

Ich bin auf Windows 7 und 8, und es gibt nur einen Abschnitt "Default Coordinator". Wo kann ich zu der Sicherheitskonfiguration gelangen, von der Sie sprechen? – qdev76

4

@ Dan,

Benötige ich nicht msdtc freigegeben für Transaktionen zu arbeiten?

Nur verteilte Transaktionen - Diejenigen, die mehr als eine einzige Verbindung umfassen. Stellen Sie doppelt sicher, dass Sie nur eine einzelne Verbindung innerhalb der Transaktion öffnen und es wird nicht eskalieren - Leistung wird auch viel besser sein.

+0

Muss msdtc nicht aktiviert sein, damit Transaktionen funktionieren? Wie auch immer, es werden, soweit ich weiß, nicht mehrere Verbindungen hergestellt. Ich habe diese Schritte bereits auf dem Client-PC ausgeführt, sagen Sie, dass ich diese Schritte auch auf dem Datenbankserver ausführen sollte? – Dan

+0

@Dan, Sie müssen DTC nicht aktivieren, wenn Sie ado.net-Transaktionen verwenden. Sie müssen MSDTC auf dem Server nur dann aktivieren, wenn Sie verteilte Transaktionen verwenden. – Niraj

17

Ich habe festgestellt, dass der beste Weg zu debuggen ist das Microsoft-Tool DTCPing

  1. Kopieren Sie die Datei sowohl auf dem Server (DB) und den Client (Application Server/Client-PC) genannt zu verwenden in den Client-NetBIOS-Computernamen und versuchen, eine DTC-Verbindung einrichten
  2. Neustart beiden Anwendungen füllen:
    • es auf dem Server starten und den Client
    • auf dem Server.
    • Auf das Client: in den Server-NetBIOS-Computernamen füllen und versuchen, eine DTC-Verbindung einrichten

ich meinen Tarif viele Probleme in unserem alten Firmennetzwerk gehabt habe, und ich habe ein paar Tipps:

  • , wenn Sie die Fehlermeldung „Gethostbyname fehlgeschlagen“ es bekommen bedeutet, dass der Computer die anderen Computer nicht durch seine NetBIOS-Namen finden kann. Der Server könnte beispielsweise den Client auflösen und pingen, aber das funktioniert auf einer DNS-Ebene. Nicht auf einer NetBIOS-Lookup-Ebene. Das Verwenden von WINS-Servern oder das Ändern von LMHOST (dirty) wird dieses Problem beheben.
  • Wenn Sie die Fehlermeldung "Acces Denied" erhalten, stimmen die Sicherheitseinstellungen nicht überein. Sie sollten die Registerkarte Sicherheit für die msdtc vergleichen und Server und Client übereinstimmen. Eine andere Sache zu betrachten ist der RestrictRemoteClients Wert. Abhängig von Ihrer Betriebssystemversion und vor allem vom Service Pack kann dieser Wert abweichen.
  • Andere Verbindungsprobleme:
    • Die Firewall zwischen dem Server und dem Client muss die Kommunikation über Port 135. Und was noch wichtiger ist die Verbindung erlauben kann von beiden Standorten begonnen werden (ich mit den Firewall-Leuten eine Menge Probleme hatten in meine Firma, weil sie angenommen, dass nur der Server eine Verbindung zu diesem Port öffnen würde)
    • Das Protokoll gibt einen zufälligen Port zurück, mit dem eine Verbindung zur tatsächlichen Transaktionskommunikation hergestellt werden kann. Firewall-Leute mögen das nicht, sie beschränken die Ports gerne auf einen bestimmten Bereich. Sie können die Generierung des dynamischen RPC-Ports auf einen bestimmten Bereich beschränken, indem Sie die unter How to configure RPC dynamic port allocation to work with firewalls beschriebenen Schlüssel verwenden.

In meiner Erfahrung, wenn der DTCPing eine DTC-Verbindung initiiert, um Setup von dem Client in der Lage ist und vom Server initiiert, sind Ihre Transaktionen nicht das Problem mehr.

4

Sie können auch here zum Aktivieren von MSDTC über die services.msc der Systemsteuerung anzeigen.

Auf dem Server, auf dem sich der Trigger befindet, müssen Sie den Dienst MSDTC einschalten. Sie können dies tun, indem Sie auf START> EINSTELLUNGEN> SYSTEMSTEUERUNG> ADMINISTRATIVE TOOLS> SERVICES klicken. Suchen Sie den Dienst 'Distributed Transaction Coordinator' (Distributed Transaction Coordinator), und klicken Sie mit der rechten Maustaste darauf (und wählen Sie )> Start.

90

verwenden für Windows Server 2008 R2 und Windows Server 2012 R2

  1. Click starten, klicken Sie auf Run, geben dcomcnfg und klicken Sie dann auf OKKomponentendienste zu öffnen.

  2. in der Konsolenstruktur auf Komponentendienste, klicken Sie erweitern erweitern Computer, klicken Sie auf Arbeitsplatz zu erweitern, klicken Sie auf Distributed Transaction Coordinator erweitern und klicken Sie dann auf Local DTC.

  3. Rechtsklick Local DTC und klicken Sie auf Eigenschaften die Lokale DTC Eigenschaften Dialogfeld angezeigt werden soll.

  4. Klicken Sie auf die Registerkarte Sicherheit.

  5. Häkchen "Netzwerk-DTC-Zugriff" Checkbox.

  6. Schließlich Häkchen "Eingehende zulassen" und "Ausgehende zulassen" Kontrollkästchen.

  7. Klicken Sie auf Anwenden, OK.

  8. Es erscheint eine Meldung über Neustart der Service.

  9. Klicken Sie OK und das ist alles.

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

Hinweis: Manchmal ist der Netzwerk-Firewall auf dem lokalen Computer oder den Server könnte die Verbindung unterbrechen, so stellen Sie sicher, Regeln zu erstellen "Eingehende zulassen" und „Allow Ausgehende " Verbindung für c:\windows\msdtc.exe

+0

Funktioniert auch für Windows Server 2012 R2. Danke für die klare Anleitung. Ich hätte das nie alleine gefunden! – jonazu

+0

@jonazu jetzt habe ich auch die Antwort für Windows Server 2012 R2 aktualisiert :) –

+0

Gute Arbeit ShivSingh! –

Verwandte Themen