一周或两周前,我们在实时应用程序中遇到了许多错误,这些错误至今未能得到解释。我们在内部看到了这些错误,并且在一组Web服务中也表现出了客户所经历的错误。
我在下面包含了内部异常,该项目使用CSLA框架,并且从数据库检索对象时发生了错误。
当我们开始遇到错误时,没有对系统进行任何已知的更改,该基础结构由许多负载平衡Web服务器组成。
错误似乎被隔离到我们的一台服务器上,我们使用连接到Web服务的控制台应用程序体验了这些错误。有问题的服务器正在使用本地DMZ IP来解决其主机文件中的Web服务,并通过强制将其移到外部来解决问题。
隔离应用程序和基础结构之间似乎是一条很好的界限,所以我想知道是否有人有任何想法或理论可以解释此?
<InnerException>
<ExceptionType>System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Exception of type 'System.InvalidOperationException' was thrown.</Message>
<Source>mscorlib</Source>
<HelpLink />
<Property name="Data">System.Collections.ListDictionaryInternal</Property>
<Property name="TargetSite">Void VerifyIntegrity()</Property>
<StackTrace> at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value)
at System.Linq.Expressions.Expression..ctor(ExpressionType nodeType, Type type)
at System.Data.Linq.SqlClient.Translator.TranslateLink(SqlLink link, List`1 keyExpressions, Boolean asExpression)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.ConvertToFetchedExpression(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.ConvertLinks(SqlExpression node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.FetchExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitMember(SqlMember m)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitNew(SqlNew sox)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect select)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitAlias(SqlAlias a)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlVisitor.VisitSource(SqlSource source)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect select)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitIncludeScope(SqlIncludeScope scope)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Bind(SqlNode node)
at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(ResultShape resultShape, Type resultType, SqlNode node, ReadOnlyCollection`1 parentParameters, SqlNodeAnnotations annotations)
at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.SingleOrDefault[TSource](IQueryable`1 source)
at NamespaceA.DaSql.NamespaceB.NamespaceBContext.NamespaceA.Da.NamespaceB.INamespaceBContext.GetClassA(Int32 objectId)
at NamespaceA.NamespaceB.ClassA.DataPortal_Fetch(SingleCriteria`2 criteria)
at dm(Object , Object[] )
at Csla.Reflection.MethodCaller.CallMethod(Object obj, DynamicMethodHandle methodHandle, Object[] parameters)</StackTrace>
</InnerException>
预先感谢您的任何帮助或理论。
编辑:
完全异常(exception)是here
下面的LINQ to SQL,无所不包,而ObjectA只是具有属性的包装器类。只需根据ID对一个对象进行简单选择和填充即可。 ctx是CSLA ContextManager。
var data = from d in ctx.DataContext.ObjectAs
where d.ObjectId == objectId
select new ObjectA
{
Id = d.DispatchId,
ClientId = d.ClientId,
DateCreated = d.DateCreated
};
return data.SingleOrDefault();
最佳答案
我看到您已附加的内部异常,并且按照异常,可能是您的集合存在问题,该集合是在执行SingleOrDefault()方法(延迟执行LINQ)时创建的。
我发布了2个链接,如果您对集合创建有所了解的话,它们可能会帮助您更好地分析问题和解决方案。希望这些链接可以帮助您解决问题:
连结1:http://typedescriptor.net/browse/members/289638-System.Runtime.CompilerServices.ConditionalWeakTable%602%5BTKey,TValue%5D.VerifyIntegrity()
链接2:http://code.google.com/p/bclcontrib-abstract/source/browse/%2BFromCoreEx/%2BKludge/Runtime/CompilerServices/ConditionalWeakTable.cs?spec=svnd7b68d68e34be8e5db308feaccf935afd2c1b8d9&name=d7b68d68e3&r=d7b68d68e34be8e5db308feaccf935afd2c1b8d9
罪魁祸首的方法可能是ConditionalWeakTable.Add()和ConditionalWeakTable.VerifyIntegrity()
上面的指针应该可以帮助您找到解决方案。谢谢