С нескольких недель мы сталкиваемся с W3WP-авариями с нашим веб-приложением ASP.Net. Они начались после обновления наших веб-серверов. Наша заявка не изменилась и была стабильной в течение многих лет.
Наша ситуация, похоже, очень похожа на этот более ранний вопрос. И этот вопрос также может быть связан, хотя в нашем случае запросы выполняются нормально в 99,9% от используемого времени.
Мы используем много несвязанных запросов LINQ и пытаемся, если их компиляция предотвратит эти сбои. Количество аварий резко сократилось, но они все еще происходят.
Также завершение наших запросов в try catch
, а затем ловкость TargetInvocationException
не работает. Исключение не обнаружено.
Когда происходит сбой, мы получаем WER-отчет и можем восстановить аварийный свал. Трассировка стека из дампа для несвязанного запроса обычно выглядит так:
в System.RuntimeMethodHandle.InvokeMethod(Object target, Object [] arguments, Signature sig, Boolean constructor)
в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object [] parameters, Object [] arguments)
в System.Delegate.DynamicInvokeImpl(Object [] args)
в System.Data.Linq.SqlClient.QueryConverter.VisitInvocation(InvocationExpression invoke)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
в System.Data.Linq.SqlClient.QueryConverter.VisitBinary(двоичное выражение b)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp)
в System.Data.Linq.SqlClient.QueryConverter.VisitBinary(двоичное выражение b)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.Visit(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.VisitWhere(последовательность выражений, предикат LambdaExpression)
в System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.VisitWhere(последовательность выражений, предикат LambdaExpression)
в System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.VisitSelect(последовательность выражений, селектор LambdaExpression)
в System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.VisitDistinct(последовательность выражений)
в System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc)
в System.Data.Linq.SqlClient.QueryConverter.VisitInner(выражение node)
в System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(выражение node)
в System.Data.Linq.SqlClient.SqlProvider.BuildQuery(запрос выражения, аннотации SqlNodeAnnotations)
в System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(запрос выражения)
в System.Data.Linq.DataQuery'1.System.Collections.Generic.IEnumerable.GetEnumerator()
в System.Linq.Buffer'1..ctor(источник IEnumerable'1)
в System.Linq.Enumerable.ToArray [TSource] (источник IEnumerable'1)
Трассировка стека из дампа для скомпилированного запроса выглядит так:
в System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object [], System.Signature, Boolean)
в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object [], System.Object [])
в System.Delegate.DynamicInvokeImpl(System.Object [])
в System.Data.Linq.SqlClient.SqlProvider.AssignParameters(System.Data.Common.DbCommand, System.Collections.ObjectModel.ReadOnlyCollection`1, System.Object [], System.Object)
в System.Data.Linq.SqlClient.SqlProvider.Execute(System.Linq.Expressions.Expression, QueryInfo, System.Data.Linq.SqlClient.IObjectReaderFactory, System.Object [], System.Object [], System.Data.Linq.SqlClient.ICompiledSubQuery [], System.Object)
в System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(System.Linq.Expressions.Expression, QueryInfo [], System.Data.Linq.SqlClient.IObjectReaderFactory, System.Object [], System.Data.Linq.SqlClient.ICompiledSubQuery [])
в System.Data.Linq.SqlClient.SqlProvider + CompiledQuery.Execute(System.Data.Linq.Provider.IProvider, System.Object [])
в System.Data.Linq.CompiledQuery.ExecuteQuery(System.Data.Linq.DataContext, System.Object [])
Кто-нибудь знает, что могло бы изменить поведение нашего приложения? Мы знаем, что это "обновление" (но не совсем такое), но нас больше интересует его технический фон.
Разумеется, мы также приветствовали бы решение, препятствующее сбою нашего приложения.