Domanda

Nel nostro progetto SharePoint 2010 stiamo usando LINQ a SharePoint per ottenere un elenco di configurazioni. Nei nostri ambienti di test non abbiamo mai avuto problemi a recuperare i dati da questo elenco. Sul nostro ambiente di produzione ora siamo a volte (non possiamo trovare uno schema in questo momento) ricevendo un'eccezione di riferimento nulla durante il giro degli articoli nell'elenco.

Di seguito è riportata l'eccezione che viene lanciata dal codice 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()

E qui il codice che utilizziamo nel nostro metodo 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()
    };
}

Chiunque abbia idee su come rintracciarlo in ciò che sta causando questa eccezione?

AGGIORNAMENTO 31-05-2011:

Abbiamo trovato un modello in quale modo possiamo riprodurre questo comportamento sul nostro ambiente di produzione. E anche sul nostro ambiente di test abbiamo avuto anche questo problema, da cui abbiamo estratto alcuni file di dump di crash utilizzando ADPLUS.

Vediamo che questo comportamento si verifica dopo che il pool di applicazioni è stato riciclato. L'unico modo per correggere questo errore è eseguire un Iisreset completo.

Nell'analisi CrashDump ho trovato un messaggio di eccezione che afferma: Codice di eccezione: 0xc0000005 Informazioni sull'eccezione: il thread cerca di leggere o scrivere a un indirizzo virtuale per il quale non ha l'accesso appropriato.

Spero che qualcuno possa darmi qualche informazione in più su questa eccezione?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top