105 votes

Le gestionnaire de transactions a désactivé son support pour les transactions à distance/réseau

Je 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 suivante est lancée:

Le gestionnaire de transactions a désactivé son support pour les transactions à distance/réseau.

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?

172voto

Magnus Points 20478

Assurez-vous que le service "Coordonnateur de transactions distribuées" est en cours d'exécution à la fois sur la base de données et le client. Assurez-vous également de vérifier "Accès réseau DTC", "Autoriser le client distant", "Autoriser entrant/sortant" et "Activer TIP".

Pour activer l'accès réseau DTC pour les transactions MS DTC

  1. Ouvrez la console de 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.

  2. Développez l'arborescence de la console pour localiser le DTC (par exemple, DTC local) pour lequel vous souhaitez activer l'accès réseau MS DTC.

  3. Dans le menu Action, cliquez sur Propriétés.

  4. Cliquez sur l'onglet Sécurité et apportez les modifications suivantes : Dans Paramètres de sécurité, sélectionnez la case à cocher Accès réseau DTC.

    Dans Communication avec le gestionnaire de transactions, sélectionnez les cases à cocher Autoriser entrant et Autoriser sortant.

17voto

Amirhossein Yari Points 707

J'avais une procédure stockée qui appelait une autre procédure stockée dans un "serveur lié". Lorsque je l'exécutais dans SSMS, tout allait bien, mais lorsque je l'appelais dans l'application (via Entity Framework), j'obtenais cette erreur. Cet article m'a aidé et j'ai utilisé ce script :

EXEC sp_serveroption @server = 'Nom ou IP du serveur lié', @optname = 'remote proc transaction promotion', @optvalue = 'false' ;

Pour plus de détails, consultez : Serveur lié : Le gestionnaire de transactions partenaire a désactivé son support pour les transactions à distance/réseau

13voto

drminnaar Points 316

Dans mon scénario, l'exception était lancé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(); // Cette fonction ouvre une nouvelle connexion au sein de cette transaction, provoquant l'exception.
        }
    }
}

void someOtherFunction()
{
    using (var db = new DBContext(GetConnectionString()))
    {
        db.Whatever // <- Exception.
    }
}

12voto

Tod Points 108

J'avais ce problème de manière intermittente, j'avais suivi les instructions ici et des instructions très similaires ailleurs. Tout était configuré correctement.

Cette page: http://sysadminwebsite.wordpress.com/2012/05/29/9/ m'a aidé à trouver le problème.

Essentiellement, j'avais des CID dupliqués 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 de 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'avions pas besoin de redémarrer. Mais le service DTC devait être configuré pour démarrer automatiquement et devait être démarré après la réinstallation.

4voto

Zack Soderquist Points 21

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 transaction distribuée" en False.

Capture d'écran des options du serveur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X