NetMsmqBindingを使用してMSMQでWCF呼び出しを実行するサービスがあります。残念ながら、MSDTCサービスからAccessViolationExceptionがランダムに発生しています(数千回の呼び出しのたびに数日おきに)。このエラーは、物理的に古いXPプロダクションシステムでのみ発生しており、devで再作成することはできません。私もイメージングに頼って、VMで実際の本番インスタンスを実行していましたが、すべてが数日間安定しています。私は見つけることができるすべてのMSMQとMSDTC関連のバージョン番号を比較し、それらはすべて一致しています。 Windows Updateは最近適用されています。 WCFエンドポイントは単一のInstanceContextModeで実行されており、ConcurrencyModeもsingleに設定されています。MSMQでのWCFによるランダムMSDTC例外
実際に問題を解決するのには至りませんが、とにかく私は次のエラーからキャッチ/リカバリできますか?
NetMsmqBindingがトランザクションを昇格させないようにする方法はありますか?キュー以外のリソースは使用していません。
The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at System.Transactions.Oletx.IDtcProxyShimFactory.BeginTransaction(UInt32, System.Transactions.Oletx.OletxTransactionIsolationLevel, IntPtr, System.Guid ByRef, System.Transactions.Oletx.ITransactionShim ByRef)
at System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(System.Transactions.TransactionOptions)
at System.Transactions.TransactionStatePromoted.EnterState(System.Transactions.InternalTransaction)
at System.Transactions.EnlistableStates.Promote(System.Transactions.InternalTransaction)
at System.Transactions.Transaction.Promote()
at System.Transactions.TransactionInterop.ConvertToOletxTransaction(System.Transactions.Transaction)
at System.Transactions.TransactionInterop.GetDtcTransaction(System.Transactions.Transaction)
at System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction(System.ServiceModel.Channels.MsmqTransactionMode)
at System.ServiceModel.Channels.MsmqQueue.ReceiveCoreDtcTransacted(System.ServiceModel.Channels.MsmqQueueHandle, System.ServiceModel.Channels.NativeMsmqMessage, System.TimeSpan, System.ServiceModel.Channels.MsmqTransactionMode, Int32)
at System.ServiceModel.Channels.MsmqQueue.ReceiveCore(System.ServiceModel.Channels.MsmqQueueHandle, System.ServiceModel.Channels.NativeMsmqMessage, System.TimeSpan, System.ServiceModel.Channels.MsmqTransactionMode, Int32)
at System.ServiceModel.Channels.MsmqQueue.TryReceiveInternal(System.ServiceModel.Channels.NativeMsmqMessage, System.TimeSpan, System.ServiceModel.Channels.MsmqTransactionMode, Int32)
at System.ServiceModel.Channels.MsmqQueue.TryReceive(System.ServiceModel.Channels.NativeMsmqMessage, System.TimeSpan, System.ServiceModel.Channels.MsmqTransactionMode)
at System.ServiceModel.Channels.MsmqReceiveHelper.TryReceive(System.ServiceModel.Channels.MsmqInputMessage, System.TimeSpan, System.ServiceModel.Channels.MsmqTransactionMode, System.ServiceModel.Channels.MsmqMessageProperty ByRef)
at System.ServiceModel.Channels.MsmqInputChannelBase.TryReceive(System.TimeSpan, System.ServiceModel.Channels.Message ByRef)
at System.ServiceModel.Channels.SecurityChannelListener`1+SecurityInputChannel[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TryReceive(System.TimeSpan, System.ServiceModel.Channels.Message ByRef)
at System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive(System.TimeSpan, System.ServiceModel.Channels.RequestContext ByRef)
at System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive(System.TimeSpan, System.ServiceModel.Channels.RequestContext ByRef)
at System.ServiceModel.Dispatcher.ChannelHandler.TryTransactionalReceive(System.Transactions.Transaction, System.ServiceModel.Channels.RequestContext ByRef)
at System.ServiceModel.Dispatcher.ChannelHandler.TransactedLoop()
at System.ServiceModel.Dispatcher.ChannelHandler.SyncTransactionalMessagePump()
at System.ServiceModel.Dispatcher.ChannelHandler.OnStartSyncMessagePump(System.Object)
at System.Runtime.IOThreadScheduler+ScheduledOverlapped.IOCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
at System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame(UInt32, UInt32, System.Threading.NativeOverlapped*)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
コードのその部分を投稿することができますか? –
私はそれを再作成することはできませんでしたが、デバッガをアタッチすることはできません。スタックトレースはイベントビューアからのもので、私のコードは表示されません。それが私のコードが関係しているかどうかは分かりません。 – mattmck