TransactionScope - Le fournisseur sous-jacent échoué sur EnlistTransaction. MSDTC été interrompue

Notre équipe ont eu un problème qui se manifeste par:

Le fournisseur sous-jacent échoué sur EnlistTransaction; Impossible d'accéder à un
objet supprimé.Nom de l'objet: "Transaction".

TransactionScope - Le fournisseur sous-jacent échoué sur EnlistTransaction. MSDTC été interrompue

qui avait semblé dès que nous avons commencé à utiliser TransactionScope pour gérer nos applications " les transactions.

La partie supérieure de la stacktrace est capturé comme:

à
Système.Les données.EntityClient.EntityConnection.EnlistTransaction(Transaction transaction)
au Système.Les données.Objets.ObjectContext.EnsureConnection() à
System.Data.Objects.ObjectContext.ExecuteStoreCommand(String commandText, Object[] parameters)
au
Reconciliation.Models.BillLines.BillLines.Reconciliation.Interfaces.IBillLineEntities.ExecuteStoreCommand(String, Object[])
au
La réconciliation.Modèles.De l'héritage.EntityDbEnvironment.ExecuteOracleSql(String sql)
dans EntityDbEnvironment.cs: ligne 41

Dans le même temps, le journal de MSDTC est mis à jour, que j'ai extraite à l'aide de la les instructions ici:

pid=7060       ;tid=7908       ;time=04/29/2013-16:38:30.269   ;seq=136        ;eventid=TRANSACTION_BEGUN                        ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"transaction has begun, description :'<NULL>'"
pid=7060       ;tid=7908       ;time=04/29/2013-16:38:30.269   ;seq=137        ;eventid=RM_ENLISTED_IN_TRANSACTION               ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"resource manager #1002 enlisted as transaction enlistment #1. RM guid = 'defc4277-47a6-4cd9-b092-93a668e2097b'"
pid=7060       ;tid=7908       ;time=04/29/2013-16:38:31.658   ;seq=138        ;eventid=RECEIVED_ABORT_REQUEST_FROM_BEGINNER     ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"received request to abort the transaction from beginner"
pid=7060       ;tid=7908       ;time=04/29/2013-16:38:31.658   ;seq=139        ;eventid=TRANSACTION_ABORTING                     ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"transaction is aborting"
pid=7060       ;tid=7908       ;time=04/29/2013-16:38:31.658   ;seq=140        ;eventid=RM_ISSUED_ABORT                          ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"abort request issued to resource manager #1002 for transaction enlistment #1"
pid=7060       ;tid=7908       ;time=04/29/2013-16:38:31.658   ;seq=141        ;eventid=RM_ACKNOWLEDGED_ABORT                    ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"received acknowledgement of abort request from the resource manager #1002 for transaction enlistment #1"
pid=7060       ;tid=7908       ;time=04/29/2013-16:38:31.658   ;seq=142        ;eventid=TRANSACTION_ABORTED                      ;tx_guid=60f6390c-7570-488a-97a9-2c3912c4ca3e     ;"TM Identifier='(null)                                            '" ;"transaction has been aborted"

Comme vous pouvez le voir un RECEIVED_ABORT_REQUEST_FROM_BEGINNER une seconde après RM_ENLISTED_IN_TRANSACTION a été enregistré.

Nous ne pouvons pas comprendre d'où cette demande d'annulation provient, ou pourquoi il a été soulevé. Le SQL à l'origine du problème est simple de SÉLECTIONNER lequel on peut exécuter sans problème par le biais de notre base de données client.

L'application fonctionne plus du temps, seulement de temps en temps l'affichage de cette question.

Nous sommes à l'utilisation d'Oracle 10.2.0.5.0 avec Entity Framework.

Mise à JOUR

Suivant les conseils de @Astrotrain-je configurer la journalisation du Système.Des Transactions. La dernière entrée produit est littéralement coupée à mi-chemin:

....
<ApplicationData>
<TraceData>
<DataItem>
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information">
<TraceIdentifier>http://msdn.microsoft.com/2004/06/System/Transactions/TransactionScopeCreated</TraceIdentifier>
<Description>TransactionScope Created</Description>
<AppDomain>BillLineGeneratorUI.exe</AppDomain>
<ExtendedData xmlns="http://schemas.microsoft.com/2004/03/Transactions/TransactionScopeCreatedTraceRecord">
<TraceSource>[Base]

Comme vous pouvez le voir l'exception effectivement empêche le journal de finition. Que puis-je apprendre de cette expérience? Des idées?

Comment voulez-vous commencer les opérations? Sont-elles imbriquées? Pouvez-vous poster quelques liées code? Je suis décision pour l'instant les questions liées à l'accessibilité entre les deux MSDTC les instances qui participent à l'opération.
Scratch. Voir ceci: blogs.msdn.com/b/ajit/archive/2010/05/31/...
L'abandon est plus de 1 sec après le début. Peut-être que vous avez une configuration automatique de la connexion//commande/délai d'expiration de transaction qui est définie à 1 seconde (ou 1000 ms), au lieu d'un délai raisonnable.
Ce que EF version utilisez-vous? Pourquoi ODAC version utilisez-vous? Pourquoi avez-vous besoin pour créer votre propre champ? Il n'a jamais travailler? Le dbcontext crée automatiquement une portée lorsque vous appelez la SaveChanges méthode.
Avez-vous vérifié la MSDN blogs de l'article à partir de mon commentaire précédent? C'est juste une question de courir Filemon et de voir si ORAMTS10.DLL est manquant . Si c'est le cas, vous pouvez utiliser la solution qui y sont décrits.

OriginalL'auteur m.edmondson | 2013-04-29