1

Windows Server 2008 R2 64 ビット サーバーに切り替えており、いくつかの問題が発生しています。Windows サービスは、Windows イベント ログに「AccessViolationException」例外をスローしています。古い W​​indows 2003 32 ビット サーバーでは、この問題は発生しませんでした。唯一のアプリの変更は、64 ビット アプリとして再コンパイルしたことです。

コードの問題なのか、サーバーのセットアップの問題なのかわかりません。なぜこれが起こるのか誰にも考えがありますか?

アップデート:

2 つのスタック トレースを次に示します。

Application: MyApplication1.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:

   at Devart.Data.Oracle.OracleConnection.BeginTransaction(System.Data.IsolationLevel)
   at MyApplication.AlertWorkerBase.persistErrors(System.String, System.String, Char)
   at MyApplication.AlertWorkerBase.StartAlertWorker()
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()


Application: MyApplication2.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException

Stack:
   at System.Threading.Thread.InternalCrossContextCallback(System.Runtime.Remoting.Contexts.Context, IntPtr, Int32, System.Threading.InternalCrossContextDelegate, System.Object[])
   at System.Runtime.Remoting.Activation.ActivationServices.DoCrossContextActivation(System.Runtime.Remoting.Activation.IConstructionCallMessage)
   at System.Runtime.Remoting.Messaging.ClientContextTerminatorSink.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage)
   at System.Runtime.Remoting.Activation.ActivationServices.Activate(System.Runtime.Remoting.Proxies.RemotingProxy, System.Runtime.Remoting.Activation.IConstructionCallMessage)
   at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(System.Runtime.Remoting.Messaging.IMessage)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(System.Runtime.Remoting.Proxies.MessageData ByRef, Int32)
   at MyApplication2.SessStatsLookup..ctor(Energy.VT.Common.ApplicationParameters)
   at MyApplication2.TCPConnection.ClientHandler.Initialize(MyApplication2.ApplicationParameters)
   at MyApplication2.TCPConnection.ClientHandler.ServeClient()
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Threading.ThreadHelper.ThreadStart()
4

1 に答える 1

0

この投稿: http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/eacaf64d-09b8-4565-9cc1-91c918a31797/

では、接続文字列が 40 バイトを超えることによって発生するバッファ オーバーフローの問題について説明しています。同じ問題だとは思いませんが、OPの回避策を試して、関連しているかどうかを確認できます。

回避策として、接続文字列のデータ ソースを解決しません (目標は、tnsnames.ora を使用せずに Oracle アプリケーションを配布することでした)。

conn 文字列が 40 バイト未満で、それでも例外が表示される場合は、オラクルに連絡して、新しいドライバーがあるかどうかを確認します。

于 2012-08-22T17:45:49.030 に答える