Serveur lié a pas pu commencer une transaction distribuée lors de la requête est à l'intérieur d'une TransactionScope
J'ai une requête qui implique un serveur Lié. La requête s'exécute correctement dans SSMS et quand enroulé autour de en C# à l'aide de Dapper
var conn = GetOpenConnection(connInitializer);
return query(conn);
produit le résultat escompté. Cependant, quand je mets le code à l'intérieur d'un TransactionScope,
using (var trans = new TransactionScope())
{
var conn = GetOpenConnection(connInitializer);
var returnValue = query(conn);
trans.Complete();
return returnValue;
}
J'ai une Erreur:
"L'opération n'a pas pu être effectuée parce que le fournisseur OLE DB "SQLNCLI11" du serveur lié xxx a pas pu commencer une transaction distribuée."
Dois-je modifier certains SQL server configuration pour faire ce travail?
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes l'exécution de la requête à l'intérieur d'une transaction explicite, la requête suit ces propriétés ACID. Vous aurez besoin de configuration de Microsoft Distributed Transaction Coordinator (MSDTC) à la gestion de la transaction sur les sources de données.
Depuis requête travaillé à l'origine en dehors de la portée d'une transaction, je suppose que c'est un simple select. Si c'est le cas, vous pouvez envisager d'ouvrir des connexions séparées pour chaque source de données, le chargement de la nécessaire données dans les objets de l'application, et la fusion de là à produire des résultats.
Sinon, être prêt à résoudre les MSDTC des problèmes de connectivité et de surveiller l'opération de la file d'attente pour les orphelins des transactions.