LINQ to SQL:包含在TargetInvocationException中的间歇性AccessViolationException

Jac*_*cco 13 .net c# linq crash linq-to-sql

几个星期以来,我们正在使用ASP.Net Web应用程序遇到W3WP崩溃问题.这些是在我们的网络服务器更新后开始的.我们的申请没有变化,并且多年来一直稳定.
我们的情况似乎与之前的问题非常相似.而这个问题也可能是相关的,但在我们的情况下,查询中使用的时代99.9%运行良好.

我们使用了大量未编译的LINQ查询,并尝试编译它们可以防止这些崩溃.崩溃的次数急剧减少,但仍然会发生.

还将我们的查询包装在一个try catch然后捕获TargetInvocationException它不起作用.没有抓住异常.

发生崩溃时,我们会收到WER报告并可以检索崩溃转储.
来自转储的堆栈跟踪对于未编译的查询通常如下所示:

at System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] arguments,Signature sig,Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object [] parameters,Object [] arguments)
at System.Delegate.DynamicInvokeImpl(
System.Data.Linq.SqlClient.QueryConverter.VisitExpression
上的System.Data.Linq.SqlClient.QueryConverter.VisitInvocation(表达式节点)
中的System.Data.Linq.SqlClient.QueryConverter.VisitInvocation(InvocationExpression invoke)中的Object [] args)(表达式exp)
System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)
System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
at System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp) )
位于System.Data.Linq.SqlClient.QueryConverter.Visit(
表达式节点)
的System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
中的System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b)at at System.Data.Linq.SqlClient.QueryC
System.Data.Linq.SqlClient
上的System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
中的System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall (MethodCallExpression mc)上的onverter.VisitWhere(表达式序列,LambdaExpression谓词) 位于System.Data.Linq的System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)的
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
中的.QueryConverter.VisitWhere(表达式序列,LambdaExpression谓词)
.
System.Data.Linq
上的System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
中的System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall (MethodCallExpression mc)中的SqlClient.QueryConverter.VisitSelect(表达式序列,LambdaExpression选择器)
System.Data.Linq.SqlClient.QueryCon中的System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
中的.SqlClient.QueryConverter.VisitDistinct(表达式序列)
System.Data.Linq.SqlClient
上System.Data.Linq.SqlClient.SqlProvider.BuildQuery(表达式查询,SqlNodeAnnotations注释)
中的System.Data.Linq.SqlClient.QueryConverter.ConvertOuter (表达式节点)处的verter.VisitInner(Expression node) System.Linq.Buffer'1的
System.Data.Linq.DataQuery'1.System.Collections.Generic.IEnumerable.GetEnumerator()
中的.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)..
System.Linq.Enumerable.ToArray [TSource](IEnumerable'1 source)中的ctor(IEnumerable'1 source)

来自转储的堆栈跟踪用于编译查询,如下所示:

System.RuntimeMethodHandle.InvokeMethod(System.Object,System.Object [],System.Signature,Boolean)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object,System.Object [],System.Object [])
at System
System.Data.Linq.SqlClient.SqlProvider.AssignParameters(System.Data.Common.DbCommand,System.Collections.ObjectModel.ReadOnlyCollection`1,System.Object [],System中的.Delegate.DynamicInvokeImpl(System.Object []).对象)
在System.Data.Linq.SqlClient.SqlProvider.Execute(System.Linq.Expressions.Expression,QueryInfo,System.Data.Linq.SqlClient.IObjectReaderFactory,System.Object的[],System.Object的[],System.Data
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(System.Linq.Expressions.Expression,QueryInfo [],System.Data.Linq.SqlClient.IObjectReaderFactory,System中的.Linq.SqlClient.ICompiledSubQuery [],System.Object).
System.Data.Linq.SqlClient.SqlProvider + CompiledQuery.Execute(System.Data.Linq.Provider.IProvider,S )中的Object [],System.Data.Linq.SqlClient.ICompiledSubQuery [])
System.Data.Linq.CompiledQuery.ExecuteQuery(System.Data.Linq.DataContext,System.Object [])中的ystem.Object [])

有谁知道什么可能改变了我们的应用程序的行为?我们知道它是"更新"(但不完全是哪一个),但我们对它的技术背景更感兴趣.
当然,我们也欢迎一种解决方案来防止我们的应用程序崩溃.

sea*_*ean 7

我想我会发布一个解决方案,我们发现了这个问题,因为我们最近开始遇到问题.

我们有很多服务器运行我们的代码就好了,但每次只有1次因为这个错误而崩溃了几次.我相信这台服务器是在.net 4.5.2上.

我们向微软开了一张票,因为他们的堆栈中发生了未处理的异常.

他们看着我们的垃圾场,然后带着这个解决方案回来了.

https://support.microsoft.com/en-us/kb/3139544上提供了一个新的修复程序

如果你转到.net 4.6.1会更好

我希望这个解决方案可以帮助那些发现自己正在阅读的人.