115 votes

Comment activer MSDTC sur SQL Server ?

Est-ce que cette question est valable ? J'ai une application Windows .NET qui utilise MSTDC et qui lève une exception :

System.Transactions.TransactionManagerCommunicationException : L'accès au réseau pour Distributed Transaction Manager (MSDTC) a été désactivé. Veuillez activer DTC pour l'accès réseau dans la configuration de sécurité de MSDTC à l'aide de l'outil d'administration des services de composants ---> System.Runtime.InteropServices.COMException (0x8004D024) : Le gestionnaire de transactions a désactivé son support pour les transactions distantes/réseau. réseau. (Exception de HRESULT : 0x8004D024) at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIden [...]

J'ai suivi le guide Kbalertz pour activer MSDTC sur le PC sur lequel l'application est installée, mais l'erreur se produit toujours.

Je me demandais si c'était un problème de base de données ? Si oui, comment puis-je le résoudre ?

0 votes

Si les solutions mentionnées ne résolvent pas le problème, vérifiez les points suivants ce lien

104voto

Andrew Peters Points 6012

Avez-vous seulement besoin de MSDTC ? L'escalade que vous rencontrez est souvent causée par la création de connexions multiples dans un seul TransactionScope.

Si vous en avez besoin, vous devez l'activer comme indiqué dans le message d'erreur. Sous XP :

  • Allez dans Outils d'administration -> Services de composants
  • Développez Component Services -> Ordinateurs ->
  • Clic droit -> Propriétés -> onglet MSDTC
  • Cliquez sur le bouton Configuration de la sécurité

2 votes

Dans le pare-feu de Windows, j'ai également ouvert le port 135 TCP et ajouté c : \windows\msdtc.exe à titre exceptionnel

21 votes

Merci pour le commentaire sur le fait que l'erreur est causée par la création de connexions multiples dans un seul TransactionScope. Je recevais l'erreur et c'était exactement le problème. Je ne voulais pas utiliser le MSDTC, j'ai donc trouvé la nouvelle connexion errante et réutilisé une connexion existante. Merci !

10 votes

Je suis sous Windows 7 et 8, et il n'y a qu'une section "Coordinateur par défaut". Où puis-je accéder à la configuration de sécurité dont vous parlez ?

21voto

Davy Landman Points 9010

J'ai découvert que la meilleure façon de déboguer est d'utiliser l'outil de Microsoft appelé DTCPing

  1. Copiez le fichier à la fois sur le serveur (BD) et sur le client (serveur d'application/pc client).
    • Lancez-le sur le serveur et le client
    • Sur le serveur : indiquez le nom de l'ordinateur netbios du client et essayez d'établir une connexion DTC.
    • Redémarrez les deux applications.
    • Sur le client : indiquez le nom de l'ordinateur netbios du serveur et essayez d'établir une connexion DTC.

J'ai eu mon lot de problèmes dans notre ancien réseau d'entreprise, et j'ai quelques conseils :

  • Si vous obtenez le message d'erreur "Gethostbyname failed", cela signifie que l'ordinateur ne peut pas trouver l'autre ordinateur par son nom. nom netbios . Le serveur pourrait par exemple résoudre et envoyer un ping au client, mais cela fonctionne au niveau du DNS. Pas au niveau de la consultation du netbios. L'utilisation de serveurs WINS ou la modification du LMHOST (sale) résoudra ce problème.
  • Si vous obtenez une erreur "Accès refusé", les paramètres de sécurité ne correspondent pas. Vous devriez comparer l'onglet sécurité du msdtc et faire correspondre le serveur et le client. Une autre chose à regarder est le paramètre RestrictRemoteClients valeur. Selon la version de votre système d'exploitation et, surtout, du Service Pack, cette valeur peut être différente.
  • Autres problèmes de connexion :
    • Le pare-feu entre le serveur et le client doit autoriser la communication sur le port 135. Et surtout, la connexion peut être établie à partir des deux sites (j'ai eu beaucoup de problèmes avec les responsables du pare-feu dans mon entreprise, car ils supposaient que seul le serveur pouvait ouvrir une connexion sur ce port).
    • Le protocole renvoie un port aléatoire auquel se connecter pour la communication de la transaction réelle. Les pare-feu n'aiment pas cela, ils préfèrent restreindre les ports à une certaine plage. Vous pouvez restreindre la génération du port dynamique RPC à une certaine plage en utilisant les clés comme décrit dans la section Comment configurer l'allocation dynamique des ports RPC pour qu'elle fonctionne avec les pare-feu ? .

D'après mon expérience, si le DTCPing est capable d'établir une connexion DTC initiée par le client et initiée par le serveur, vos transactions ne sont plus le problème.

7voto

user1208908 Points 201

Peut aussi voir ici sur la façon d'activer MSDTC à partir de services.msc du panneau de configuration.

Sur le serveur où se trouve le déclencheur, vous devez activer le service MSDTC en service. Vous pouvez le faire en cliquant sur START > SETTINGS > CONTROL PANEL > ADMINISTRATIVE TOOLS > SERVICES. Trouvez le service appelé 'Distributed Transaction Coordinator' et CLIQUEZ DROIT (sur celui-ci et sélectionnez) > Démarrer. sélectionnez) > Démarrer.

4voto

Andrew Peters Points 6012

@Dan,

N'ai-je pas besoin que le msdtc soit activé pour que pour que les transactions fonctionnent ?

Uniquement les transactions distribuées - celles qui impliquent plus d'une seule connexion. Assurez-vous que vous n'ouvrez qu'une seule connexion au sein d'une transaction et que le problème ne s'aggravera pas - les performances seront également bien meilleures.

0 votes

N'est-il pas nécessaire d'activer le msdtc pour que les transactions fonctionnent ? Quoi qu'il en soit, les connexions multiples ne sont pas établies, pour autant que je sache. J'ai déjà exécuté ces étapes sur le PC client, êtes-vous en train de dire que je devrais également le faire sur le serveur de base de données ?

0 votes

@Dan, vous n'êtes pas tenu d'activer le DTC si vous utilisez des transactions ado.net. Vous devez activer MSDTC sur le serveur uniquement si vous utilisez des transactions distribuées.

4voto

Lars Mæhlum Points 4569

MSDTC doit être activé sur les deux systèmes, le serveur et le client.
Vérifiez également qu'il n'y a pas de pare-feu entre les systèmes qui bloque les RPC.
DTCTest est une petite application sympa qui vous aide à résoudre d'autres problèmes.

0 votes

Je pense que c'est le nouvel emplacement microsoft.com/fr/download/details.aspx?id=30746

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