将应用程序移动到服务器2008R2 64位时的AccessViolationException

时间:2012-08-22 13:11:25

标签: c# .net exception-handling 64-bit windows-server-2008

我们正在切换到Windows Server 2008 R2 64位服务器,并且看到了一些问题。我们的Windows服务在Windows事件日志中抛出“AccessViolationException”异常。我们的旧版Windows 2003 32位服务器上从未遇到此问题。唯一的应用程序更改是重新编译为64位应用程序。

我不知道这是代码问题还是服务器设置问题。任何人都有任何想法为什么会这样?

更新

以下是两个堆栈跟踪:

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()

1 个答案:

答案 0 :(得分:0)

这篇文章:http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/eacaf64d-09b8-4565-9cc1-91c918a31797/

讨论了由连接字符串>引起的缓冲区溢出问题。 40个字节。我怀疑这是同一个问题,但你可以尝试OP的工作来看看它是否相关:

  

作为解决方法,我不会解析连接中的数据源   字符串(目标是在不使用的情况下分发Oracle应用程序   tnsnames.ora中)。

如果您的conn字符串小于40个字节,并且您仍然看到异常,我会联系oracle并查看他们是否有更新的驱动程序。