TransactionScope-Fehler mit Sql Server 2000 - partner-Transaktions-manager deaktiviert hat seine Unterstützung für remote - /netzwerktransaktionen
Ich versuche zum einrichten einer einfachen Transaktion für meine Linq-to-Sql-Aktionen gegen meine Sql 2000-Datenbank. Mit TransactionScope sieht es wie folgt aus:
using (TransactionScope transaction = new TransactionScope())
{
try
{
Store.DBDataContext dc = new Store.DBDataContext();
Store.Product product = GetProduct("foo");
dc.InsertOnSubmit(product);
dc.SubmitChanges();
transaction.Complete();
}
catch (Exception ex)
{
throw ex;
}
}
Aber ich bekomme immer folgenden Fehler:
Die partner-Transaktions-manager deaktiviert hat seine Unterstützung für remote - /netzwerktransaktionen. (Ausnahme von HRESULT: 0x8004D025)
Aber, wenn ich die Transaktion über eine herkömmliche Transaktion, es funktioniert gut. Damit dies gut funktioniert:
Store.DBDataContext dc = new Store.DBDataContext();
try
{
dc.Connection.Open();
dc.Transaction = dc.Connection.BeginTransaction();
Store.Product product = GetProduct("foo");
dc.InsertOnSubmit(product);
dc.SubmitChanges();
dc.Transaction.Commit();
}
catch (Exception ex)
{
dc.Transaction.Rollback();
throw ex;
}
finally
{
dc.Connection.Close();
dc.Transaction = null;
}
Frage ich mich, ob die TransactionScope ist, etwas anderes zu tun unter der Decke, als meine zweite Umsetzung. Wenn nicht, was habe ich zu verlieren, nicht mit TransactionScope? Auch jegliche Hinweise auf das, was den Fehler verursacht wäre auch gut. Ich habe bestätigt, dass MS DTC ausgeführt wird, in beide sql server und auf meinem client-Rechner.
InformationsquelleAutor Bramha Ghosh | 2008-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick hier:
Schnelle Transaktionen mit System.Transaktionen und Microsoft SQL Server 2000
http://blogs.msdn.com/florinlazar/archive/2005/09/29/475546.aspx
Und hier:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=230390&SiteID=1
Die Anleitungen zum konfigurieren von MSDTC, die offenbar nicht für windows 7 habe ich nur noch eine option unter der Registerkarte MSDTC es sagt: verwenden Sie den lokalen Koordinator oder geben Sie die remote-host zu verwenden.
Ich fand die Anweisungen zum Auffinden dieser Einstellungen auf Windows 7 und 2008! Schau mal hier: msdn.microsoft.com/en-us/library/aa561924(BTS.20).aspx
InformationsquelleAutor Keith Sirmons
Den DatabaseTransactionAdapter Umsetzung in den Florin Lazar post, Keith Sirmons wies mir scheint, den trick zu tun. Hier ist mein code, es ruft:
Das einzige, was mir unbehaglich ist, dass ich nicht explizit schließen der Verbindung, obwohl es nicht deklariert innerhalb einer 'mit' - Anweisung.
Aber laut Florin Lazar, das ist absichtlich.
InformationsquelleAutor Bramha Ghosh
Den Schritten zum aktivieren dieser auf Windows 2008 oder höher sind:
InformationsquelleAutor David Scott
mehr bemerken, dass:
- Server Configuration Guide
COM+ - Netzwerkzugriff aktivieren (Windows Server 2003)
Start ==> Control Panel ==> Hinzufügen oder Entfernen von Programmen ==>Hinzufügen/Entfernen von Windows-Komponenten", Wählen Sie Anwendungsserver aus, und klicken Sie dann auf Details. Klicken Sie auf COM+ - Netzwerkzugriff Aktivieren, und klicken Sie dann auf OK. Klicken Sie auf Weiter, und klicken Sie dann auf Fertig stellen.
- Wenn zwischen 2 server, firewall, öffnen Sie die firewall für die beiden in/out auf diesem Bereich-port:
Klicken Sie auf Start ==> Control Panels ==> Verwaltung ==> Komponenten-Dienste. Erweitern Sie Komponente-Dienst, erweitern Sie Computer, klicken Sie Rechts auf Arbeitsplatz und wählen Sie Eigenschaften.
In den Arbeitsplatz-Eigenschaften-Fenster, klicken Sie auf die Registerkarte Standard-Protokoll, klicken Sie auf Verbindungs-orientierten TCP/IP und wählen Sie Eigenschaften. in dem neuen Fenster, klicken Sie auf hinzufügen und geben Sie den neuen DTC-ports-Bereich.
Klicken Sie auf OK, um diese zu ändern.
Server muss neu starten für eine neue änderung wirksam
InformationsquelleAutor
Poste ich die Lösung hier unten, weil Sie nach etwas suchen, das ist, wo ich landete, so dass andere möglicherweise auch. Ich versuchte zu verwenden EF 6, um eine gespeicherte Prozedur aufrufen, aber hatte eine ähnliche Fehlermeldung, weil die gespeicherte Prozedur hatte Verbindungsserver genutzt.
Der Vorgang konnte nicht durchgeführt werden, da OLE DB-provider _ für den Verbindungsserver _ war nicht in der Lage verteilte Transaktion beginnen
Der partner-Transaktions-manager deaktiviert hat seine Unterstützung für remote - /netzwerktransaktionen
Springen über SQL-Client hat mein Problem behoben, die auch mir bestätigt, dass es ein EF-Sache.
EF-Modell generierte Methode basiert Versuch:
ExecuteSqlCommand basiert Versuch:
Mit:
Code kann verkürzt werden, aber ich denke, die version ist etwas bequemer für das Debuggen und die schrittweise Durchlaufen.
Ich glaube nicht, dass der Sql-Client ist unbedingt die bevorzugte Wahl, aber ich fühlte, das war zumindest es Wert ist zu teilen, wenn jemand anderes mit ähnlichen Problemen bekommt hier gelandet durch google.
InformationsquelleAutor Greg