J'utilise SQL Server et ASP.NET. J'ai la fonction suivante:
Using js = daoFactory.CreateJoinScope()
Using tran = New Transactions.TransactionScope()
'...
tran.Complete()
End Using
End Using
Cependant, l'exception « Le gestionnaire de transactions a désactivé sa prise en charge des transactions à distance / réseau. ' Est lancé.
Description de JoinScope:
Public Class JoinScope
Implements IJoinScope
Implements IDisposable
'...
End Class
J'ai travaillé de cette façon dans une autre application avec le même environnement sans problème, mais ici j'ai ce problème. Que puis-je faire pour résoudre le problème?
asp.net
vb.net
transactionscope
Lajos Arpad
la source
la source
Réponses:
Assurez-vous que le service «Distributed Transaction Coordinator» est en cours d'exécution sur la base de données et le client. Assurez-vous également de cocher «Accès réseau DTC», «Autoriser le client distant», «Autoriser les entrées / sorties» et «Activer TIP».
Pour activer l'accès DTC réseau pour les transactions MS DTC
Ouvrez le composant logiciel enfichable Services de composants.
Pour ouvrir les services de composants, cliquez sur Démarrer. Dans la zone de recherche, tapez dcomcnfg, puis appuyez sur ENTRÉE.
Développez l'arborescence de la console pour localiser le DTC (par exemple, Local DTC) pour lequel vous souhaitez activer Network MS DTC Access.
Dans le menu Action, cliquez sur Propriétés.
Cliquez sur l'onglet Sécurité et apportez les modifications suivantes: Dans Paramètres de sécurité, cochez la case Accès réseau DTC.
Dans Transaction Manager Communication, cochez les cases Autoriser les entrées et Autoriser les sorties.
la source
J'avais ce problème par intermittence, j'avais suivi les instructions ici et des instructions très similaires ailleurs. Tout a été configuré correctement.
Cette page: http://sysadminwebsite.wordpress.com/2012/05/29/9/ m'a aidé à trouver le problème.
Fondamentalement, j'avais des CID en double pour le MSDTC sur les deux serveurs. HKEY_CLASSES_ROOT \ CID
Voir: http://msdn.microsoft.com/en-us/library/aa561924.aspx section Assurez-vous que MSDTC se voit attribuer une valeur CID unique
Je travaille avec des serveurs virtuels et notre équipe de serveurs aime utiliser la même image pour chaque serveur. C'est une solution simple et nous n'avons pas besoin d'un redémarrage. Mais le service DTC avait besoin d'un paramètre de démarrage automatique et devait être démarré après la réinstallation.
la source
J'ai eu une procédure de magasin qui appelle une autre procédure de magasin dans "serveur lié" .Lorsque je l'exécute dans ssms, c'était ok, mais quand je l'appelle dans l'application (By Entity Framework), j'ai eu cette erreur. Cet article m'a aidé et j'ai utilisé ce script:
EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;
pour plus de détails, regardez ceci: Serveur lié: Le gestionnaire de transactions partenaire a désactivé sa prise en charge des transactions à distance / réseau
la source
Dans mon scénario, l'exception était levée car j'essayais de créer une nouvelle instance de connexion dans un TransactionScope sur une connexion déjà existante:
Exemple:
void someFunction() { using (var db = new DBContext(GetConnectionString())) { using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted })) { someOtherFunction(); // This function opens a new connection within this transaction, causing the exception. } } } void someOtherFunction() { using (var db = new DBContext(GetConnectionString())) { db.Whatever // <- Exception. } }
la source
Commentaire de la réponse : "assurez-vous d'utiliser la même connexion ouverte pour tous les appels à la base de données à l'intérieur de la transaction. - Magnus"
Nos utilisateurs sont stockés dans une base de données distincte des données avec lesquelles je travaillais dans les transactions. L'ouverture de la connexion à la base de données pour obtenir l'utilisateur était à l'origine de cette erreur pour moi. Le déplacement de l'autre connexion de base de données et de la recherche utilisateur en dehors de la portée de la transaction a corrigé l'erreur.
la source
Je poste la solution ci-dessous ici car après quelques recherches, c'est là que j'ai atterri, donc d'autres peuvent aussi. J'essayais d'utiliser EF 6 pour appeler une procédure stockée, mais j'ai eu une erreur similaire car la procédure stockée avait un serveur lié utilisé.
L'opération n'a pas pu être effectuée car le fournisseur OLE DB _ pour le serveur lié _ n'a pas pu commencer une transaction distribuée
Le gestionnaire de transactions partenaire a désactivé sa prise en charge des transactions à distance / réseau *
Passer à SQL Client a résolu mon problème, ce qui m'a également confirmé qu'il s'agissait d'un problème EF.
Tentative basée sur la méthode générée par le modèle EF:
Tentative basée sur ExecuteSqlCommand:
db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");
Avec:
var connectionString = db.Database.Connection.ConnectionString; var connection = new System.Data.SqlClient.SqlConnection(connectionString); var cmd = connection.CreateCommand(); cmd.CommandText = "exec [SomeDB].[dbo].[SomeStoredProcedure]"; connection.Open(); var result = cmd.ExecuteNonQuery();
Ce code peut être raccourci, mais je pense que cette version est légèrement plus pratique pour le débogage et la progression.
Je ne pense pas que Sql Client soit nécessairement un choix préféré, mais j'ai estimé que cela valait au moins la peine d'être partagé si quelqu'un d'autre ayant des problèmes similaires est atterri ici par Google.
Le code ci-dessus est C #, mais le concept d'essayer de basculer vers Sql Client s'applique toujours. À tout le moins, ce sera un diagnostic d'essayer de le faire.
la source
Si vous ne trouvez pas DTC local dans les services de composants, essayez d'abord d'exécuter ce script PowerShell:
$DTCSettings = @( "NetworkDtcAccess", # Network DTC Access "NetworkDtcAccessClients", # Allow Remote Clients ( Client and Administration) "NetworkDtcAccessAdmin", # Allow Remote Administration ( Client and Administration) "NetworkDtcAccessTransactions", # (Transaction Manager Communication ) "NetworkDtcAccessInbound", # Allow Inbound (Transaction Manager Communication ) "NetworkDtcAccessOutbound" , # Allow Outbound (Transaction Manager Communication ) "XaTransactions", # Enable XA Transactions "LuTransactions" # Enable SNA LU 6.2 Transactions ) foreach($setting in $DTCSettings) { Set-ItemProperty -Path HKLM:\Software\Microsoft\MSDTC\Security -Name $setting -Value 1 } Restart-Service msdtc
Et ça paraît!
Source: le gestionnaire de transactions partenaire a désactivé sa prise en charge des transactions à distance / réseau
la source
Au cas où d'autres auraient le même problème:
J'ai eu une erreur similaire. s'est avéré que j'enveloppais plusieurs instructions SQL dans une transaction, où l'une d'entre elles était exécutée sur un serveur lié (instruction Merge dans une instruction EXEC (...) AT Server). J'ai résolu le problème en ouvrant une connexion distincte au serveur lié, encapsulant cette déclaration dans un try ... catch puis abandonnez la transaction sur la connexion d'origine au cas où le catch serait déclenché.
la source
J'ai eu le même message d'erreur. Pour moi , le changement
pooling=False
à;pooling=true;Max Pool Size=200
la chaîne de connexion fixe le problème.la source
J'avais ce problème avec un serveur lié dans SSMS en essayant de créer une procédure stockée.
Sur le serveur lié, j'ai changé l'option du serveur «Activer la promotion sur la transaction distribuée» en False.
Capture d'écran des options du serveur
la source