[c#] WCF-MSMQ-Transaktion und Arbeitseinheit



Answers

Question

Ich habe einen MSMQ WCF-Dienst erstellt, der transaktional ist. Ich habe das folgende Attribut für meine Operation verwendet:

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]

Ich benutze Nhibernate im Dienst. Mit Nhibernate gebe ich einen Commit auf meiner Sitzung. Wenn ich den Nhibernate-Commit deaktiviere, wird die Nachricht korrekt verarbeitet und aus den Warteschlangen entfernt. Mit diesem Commit wird die Nhibernate-Transaktion korrekt ausgeführt, aber meine Nachricht wird in die Wiederholungswarteschlange übernommen.

Hier ist die Ausnahme, dass ich in Nhibernate Service Trace komme.

Description Handling an exception. Exception details: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Transaction'.
   at System.Transactions.Transaction.DependentClone(DependentCloneOption cloneOption)
   at System.Transactions.TransactionScope.SetCurrent(Transaction newCurrent)
   at System.Transactions.TransactionScope.PushScope()
   at System.Transactions.TransactionScope.Initialize(Transaction transactionToUse, TimeSpan scopeTimeout, Boolean interopModeSpecified)
   at System.Transactions.TransactionScope..ctor(Transaction transactionToUse, TransactionScopeAsyncFlowOption asyncFlowOption)
   at System.Transactions.TransactionScope..ctor(Transaction transactionToUse)
   at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment preparingEnlistment)
   --- End of inner exception stack trace ---
   at System.Transactions.TransactionStatePromotedAborted.PromotedTransactionOutcome(InternalTransaction tx)
   at System.Transactions.TransactionStatePromotedEnded.EndCommit(InternalTransaction tx)
   at System.Transactions.CommittableTransaction.Commit()
   at System.ServiceModel.Dispatcher.TransactionInstanceContextFacet.Complete(Transaction transaction, Exception error)

Es scheint, dass das Nhibernate-Commit die Transaktion auf WCF zerstört. Ich kann den Weg nicht finden, um das zu beheben.

Jede Hilfe kann geschätzt werden






Related