Pregunta

En nuestro proyecto SharePoint 2010 estamos utilizando LINQ a SharePoint para obtener una lista de ConfigurationItems. En nuestros entornos de prueba nunca tuvimos problemas para obtener datos de esta lista. En nuestro entorno de producción, ahora a veces (no podemos encontrar un patrón en este momento) obteniendo una excepción de referencia nula al recorrer los elementos en la lista.

A continuación se muestra la excepción que se están lanzando desde el código LINQ a SharePoint:

Object reference not set to an instance of an object. StackTrace: 
at Microsoft.SharePoint.Linq.FieldRef.GetHashCode()
at Microsoft.SharePoint.Linq.FieldRef.FieldRefEqualityComparer.GetHashCode(FieldRef obj)
at System.Linq.Set`1.InternalGetHashCode(TElement value)  at System.Linq.Set`1.Find(TElement value, Boolean add)  at System.Linq.Enumerable.d__7a`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)  at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)  at Microsoft.SharePoint.Linq.SelectMappingInfo.GetDistinctMappedFields()
at Microsoft.SharePoint.Linq.Rules.PushDownProcessor.SelectWithInfoOp.PushDownSelect(Context ctx)
at Microsoft.SharePoint.Linq.Rules.PushDownProcessor.SelectWithInfoOp.Process(Context ctx)
at Microsoft.SharePoint.Linq.Rules.GuardedRule`4.c__DisplayClass7.b__6(TSourceBase src, TContext ctx)
at Microsoft.SharePoint.Linq.Rules.RewriteRule`2.Apply(TNode src, TContext ctx)  at Microsoft.SharePoint.Linq.Rules.CacheRule`3.Apply(TSource src, TContext ctx)  
at Microsoft.SharePoint.Linq.Rules.PushDownProcessor.b__0(Expression e, Context ctx)
at Microsoft.SharePoint.Linq.Rules.ChildRule`2.Apply(TNode src, TContext ctx)  at Microsoft.SharePoint.Linq.Rules.PushDownProcessor.b__3(Expression e, Context ctx)
at Microsoft.SharePoint.Linq.Rules.RewriteRule`2.Apply(TNode src, TContext ctx)  at Microsoft.SharePoint.Linq.Rules.CacheRule`3.Apply(TSource src, TContext ctx)  
at Microsoft.SharePoint.Linq.SPLinqProvider.Rewrite(Expression expression, List`1& assumptions)
at Microsoft.SharePoint.Linq.SPLinqProvider.RewriteAndCompile[T](Expression expression, List`1& assumptions)
at Microsoft.SharePoint.Linq.LinqQuery`1.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)  
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)  
at Common.Configuration.ConfigurationRepository.GetConfiguration(String siteUrl) InnerException:

Source: Microsoft.SharePoint.Linq TargetSite: Int32 GetHashCode()

Y aquí el código que usamos en nuestro método GetConfiguration.

using (SpDataContext dataContext = new SpDataContext(siteUrl))
{
    result = new ConfigurationModel()
    {
        Configurations = (from item in dataContext.GasportConfiguration
                          select new ConfigurationItem()
                          {
                              Key = item.Key,
                              Value = item.Value,
                              Environment = (Environment)Enum.Parse(typeof(Environment), item.Environment.ToString(), true)
                          }).ToList()
    };
}

¿Alguien tiene ideas sobre cómo rastrear esto a lo que está causando esta excepción?

Actualización 31-05-2011:

Encontramos un patrón en la que podemos reproducir este comportamiento en nuestro entorno de producción. Y también en nuestro entorno de prueba también tuvimos este problema, de los cuales extrajimos algunos archivos de volcado de choque usando ADPLUS.

Vemos que este comportamiento ocurre después de que se recicla el grupo de aplicaciones. La única forma de corregir este error es realizar un IISRESet completo.

En el análisis CrashDump, encontré un mensaje de excepción que establece: Código de excepción: 0xc0000005 Información de excepción: el hilo intenta leer o escribir en una dirección virtual para la cual no tiene el acceso apropiado.

¿Espero que alguien pueda darme más información sobre esta excepción?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top