2010-05-14 3 views
0

que je développe une application Web ASP.NET qui utilise le AjaxControlkit 3.0.30512.20315. J'ai une instance ToolkitScriptManager sur ma page principale qui a une ScriptReferences dans la collection CombineScripts. Si j'accéder à ma page par défaut de 2 clients differenct après une iisreset, je reçois l'exception suivanteToolkitScriptManager jette NullReferenceException lors de l'accès simultané à une page pour la première fois

[NullReferenceException: Object Reference not set to an instance of an object.] 
    System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) +143 
    System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value) +11 
    AjaxControlToolkit.ToolkitScriptManager.GetScriptCombineAttributes(Assembly assembly) +129 
    AjaxControlToolkit.ToolkitScriptManager.IsScriptCombinable(ScriptEntry scriptEntry) +148 
    AjaxControlToolkit.ToolkitScriptManager.OnResolveScriptReference(ScriptReferenceEventArgs e) +415 
    System.Web.UI.ScriptManager.RegisterScripts() +191 
    System.Web.UI.ScriptManager.OnPagePreRenderComplete(Object sender, EventArgs e) +113 
    System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +8698462 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1029 

En utilisant .NET Reflector j'ai découvert que l'accès de la méthode GetScriptCombineAttributes un static dictionary, qui est not protected against concurrent access. Soit j'ai une condition de concurrence dans mon code ou il y a un bug dans le AjaxToolkit.

Quelqu'un peut-il me donner un indice sur celui-là?

Merci à l'avance

+0

Avez-vous déjà obtenu n'importe où avec ceci? – ilivewithian

+0

"Correction avec la version de janvier 2013 de la boîte à outils de contrôle Ajax" – user423430

Répondre

-1

Ce bug a été officiellement signalé sur le site Web ASP.NET AJAX Control Toolkit, le 1er Juin 2010. Votez pour ici:

http://ajaxcontroltoolkit.codeplex.com/workitem/26752

Comme il se produit dans le Dans la partie Page du pipeline ASP.NET, vous pouvez essayer de remplacer la méthode OnPreRenderComplete pour implémenter un mécanisme de verrouillage afin de bloquer les requêtes jusqu'à ce que la première se soit terminée avec succès. Même la mise en œuvre la plus légère affecterait chaque requête, vous pouvez donc choisir de l'inclure uniquement sur une page de connexion ou quelque chose (dans un scénario où aucune autre page ne rendrait quelque chose puisque les utilisateurs n'étaient pas connectés). Si l'erreur se produit partout sur votre site, le verrou se retrouvera probablement dans une classe de base de chaque page.

Questions connexes