Проблемы параллелизма с ScriptManager

Я знаю, что Asp.Net WebForms довольно старый и устаревший, но я надеюсь, что все еще есть люди, поддерживающие такую ​​устаревшую кодовую базу...

Я вижу странные ошибки при нагрузочном тестировании нашего веб-сайта, которые, похоже, сводятся к проблемам параллелизма в том, как.Net обрабатывает ссылки на скрипты на странице. Я могу увидеть сообщения о проблеме, возникшей в 2007 году, здесь: ScriptManager выдает "Запись с таким же ключом уже существует".,

Я использую.Net 4.7.2, и вот пример ошибок, которые происходят под нагрузкой:

Ошибка 1 ArgumentException: запись с таким же ключом уже существует.

   at System.Collections.Specialized.ListDictionary.Add(Object key, Object value)
   at System.Web.UI.ClientScriptManager.RegisterScriptBlock(ScriptKey key, String script, ListDictionary& scriptBlocks, ArrayList& scriptList, Boolean needsScriptTags)
   at System.Web.UI.ClientScriptManager.RegisterScriptBlock(ScriptKey key, String script, ClientAPIRegisterType type)
   at System.Web.UI.ScriptRegistrationManager.RegisterClientScriptInclude(Control control, Type type, String key, String url)
   at System.Web.UI.ScriptManager.RegisterClientScriptIncludeInternal(Control control, Type type, String key, String url)
   at System.Web.UI.ScriptManager.RegisterUniqueScripts(List'1 uniqueScripts)
   at System.Web.UI.ScriptManager.RegisterScripts()
   at System.Web.UI.ScriptManager.OnPagePreRenderComplete(Object sender, EventArgs e)
   at System.Web.UI.Page.OnPreRenderComplete(EventArgs e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Ошибка 2 IndexOutOfRangeException: индекс находился за пределами массива.

   at System.Collections.Generic.List'1.Add(T item)
   at System.Web.UI.ScriptRegistrationManager.RegisterClientScriptInclude(Control control, Type type, String key, String url)
   at System.Web.UI.ScriptManager.RegisterClientScriptIncludeInternal(Control control, Type type, String key, String url)
   at System.Web.UI.ScriptManager.RegisterUniqueScripts(List'1 uniqueScripts)
   at System.Web.UI.ScriptManager.RegisterScripts()
   at System.Web.UI.ScriptManager.OnPagePreRenderComplete(Object sender, EventArgs e)
   at System.Web.UI.Page.OnPreRenderComplete(EventArgs e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Ошибка 3 Ссылка на объект не установлена ​​на экземпляр объекта.

   at System.Web.UI.ClientScriptManager.RenderRegisteredScripts(HtmlTextWriter writer, ArrayList scripts, Boolean checkForScriptManagerRegistrations)
   at System.Web.UI.ClientScriptManager.RenderClientScriptBlocks(HtmlTextWriter writer)
   at System.Web.UI.Page.BeginFormRender(HtmlTextWriter writer, String formUniqueID)
   at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
   at ASP.masters_site_master.__RenderHtml(HtmlTextWriter __w, Control parameterContainer)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Page.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Глядя на исходный код из.Net, единственная возможность, что эти ошибки могут возникнуть, это многопоточность. Я вижу, что некоторые поля и методы внутри статичны ScriptManager а также ClientScriptManager что может объяснить это, хотя я не нашел верного сценария, где произошел бы параллелизм.

Кто-нибудь видел, решил или обойти эту проблему?

0 ответов

Другие вопросы по тегам