Nasz zespół mam problem, który przejawia się jako:TransactionScope - Podstawowy dostawca nie powiódł się na EnlistTransaction. MSDTC jest przerwana
Podstawowym dostawcą zawiodły na EnlistTransaction; Nie można uzyskać dostępu do obiektu unieszkodliwionego .Object name: 'Transaction'.
co wydawało się pojawiać jak tylko zaczęliśmy używać TransactionScope do obsługi transakcji naszych aplikacji.
górna część stacktrace jest wychwytywana jako:
w System.Data.EntityClient.EntityConnection.EnlistTransaction (transakcja transakcja) w System.Data.Objects.ObjectContext.EnsureConnection() w System.Data.Objects.ObjectContext.ExecuteStoreCommand (ciąg CommandText, obiekt [] parametry) w Reconciliation.Models.BillLines.BillLines.Reconciliation.Interfaces.IBillLineEntities.ExecuteStoreCommand (ciąg, obiekt []) w Reconciliation.Models. Legacy.EntityDbEnvironment.Ex ecuteOracleSql (SQL String) w EntityDbEnvironment.cs: linia 41
Jednocześnie MSDTC dziennika jest aktualizowany, co mam ekstrakcji za pomocą instructions here:
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"
Jak można zobaczyć RECEIVED_ABORT_REQUEST_FROM_BEGINNER sekund po RM_ENLISTED_IN_TRANSACTION został zalogowany.
Nie możemy zrozumieć, skąd pochodzi ten abortujący wniosek lub dlaczego został zgłoszony. SQL powodujący problem to prosty SELECT, który możemy wykonać bez problemu za pośrednictwem naszego klienta bazy danych.
Aplikacja działa większość czasu, tylko sporadycznie wyświetla ten problem.
Używamy Oracle 10.2.0.5.0 z Entity Framework.
UPDATE
Po poradę @Astrotrain skonfigurować rejestrowanie na System.Transactions. Ostateczna pozycja produkowana jest dosłownie odcięta w połowie drogi jednak:
....
<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]
Jak widać wyjątek rzeczywiście zapobiega wykończenie dziennika. Czego mogę się z tego nauczyć? Jakieś pomysły?
Jak rozpocząć transakcje? Czy są zagnieżdżone? Czy możesz opublikować powiązany kod? Na razie wykluczam problemy związane z osiągalnością między dwiema instancjami MSDTC uczestniczącymi w transakcji. –
Zdrap to. Zobacz: http://blogs.msdn.com/b/ajit/archive/2010/05/31/msdtc-oracle-10g-client-new-transaction-cannot-enlist-in-the-specified-transaction-coordinator .aspx –
Przerwanie trwa więcej niż 1 sekundę po rozpoczęciu. Być może masz konfigurację czasu automatycznego/połączenia/polecenia/transakcji zdefiniowanego na 1 sekundę (lub 1000 ms) zamiast rozsądnego czasu. –