Hashtable插入失败.负载系数太高. - asp.NET 4.0 MVC3

use*_*361 7 asp.net-mvc load-balancing .net-4.0 asp.net-mvc-3

我们有一个在F5负载平衡服务器上运行的ASP.NET 4.0 MVC3应用程序.

我们收到了以下例外情况.我们不在我们的Web应用程序中进行多线程,但不知道F5负载平衡服务器是否可以考虑到这个等式.我们看到早期版本的.NET发生异常的位置(大多数其他帖子都涉及.NET 2.0和3.5).有谁在.NET 4.0中遇到过这个问题?

该异常使应用程序无法使用,因为登录时无法加载页面而不会遇到异常.

已审核的其他链接:

2012-02-02 06:01:42,671 [26]致命系统[(null)] - XYZ应用程序中发生未处理的异常.System.InvalidOperationException:Hashtable插入失败.负载系数太高.最常见的原因是多个线程同时写入Hashtable.在System.ComponentModel的System.ComponentModel.TypeDescriptor.GetProvider(Type type)的System.ComponentModel.TypeDescriptor.NodeFor(Type type,Boolean createDelegator)处的System.Collections.Hashtable.Insert(Object key,Object nvalue,Boolean add)处.位于System.Web.Mvc.ControllerActionInvoker的System.Web.Mvc.ControllerActionInvoker.GetModelBinder(ParameterDescriptor parameterDescriptor)的System.Web.Mvc.ModelBinderDictionary.GetBinder(TypeTypeType,IModelBinder fallbackBinder)中的DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider..ctor(Type type). System.Web.Mvc.Controller上的System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,String actionName)中的System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext,ActionDescriptor actionDescriptor)中的GetParameterValue(ControllerContext controllerContext,ParameterDescriptor parameterDescriptor) System.Web.Mvc.ControllerBase.Execute(RequestCont.)中的.ExecuteCore()
在system.Web.Mvc.MvcHandler上的System.Web.Mvc.MvcHandler.<> c__DisplayClass6.<> c__DisplayClassb.b__5()处的System.Web.Mvc.Async.AsyncResultWrapper.<> c__DisplayClass1.b__0()处的ext requestContext . <> c__DisplayClasse.b__d()在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&completedSynchronously)的System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()中

从堆栈跟踪中可以看出,它没有指向代码中的特定位置,因此很难进行调试.

任何防止遇到此异常的建议都将非常感激.

Rau*_*jar 6

这是一个不常见的问题,但确实发生在许多人身上(包括我在内).它似乎没有与任何特定的负载阈值相关联,它只是"发生",一旦它发生,它会继续更频繁地发生,无论负载如何.
解决方案:
临时:重置IIS并交叉手指它不会再次发生
永久:从KB文章中描述的微软获取补丁或等待.Net的下一个版本将被修复(已报告已经已修复4.5 Beta)


Jas*_*son 0

查看 Kim 在此线程中的回复:http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/172f4f77-601e-4b4f-8d98-582f8f62a98e


嗨马特,

在.NET 2.0中,这个错误几乎总是由多个线程同时修改Hashtable引起的。修复方法是在修改哈希表之前插入锁,因为哈希表不是多写入器线程安全的。另一种可能的解决方案是通过 Hashtable.Synchronized 使用同步包装器,但是我们建议使用前者以获得更好的控制。

如果是您的代码修改了哈希表,那么这就是修复方法。根据您提供的信息,我认为情况并非如此。您提到您在 ASP 2.0 网站上遇到了此错误,因此这可能是由下游 Hashtable 调用者引起的。例如,如果调用堆栈如下所示,请注意这是最新版本已修复的错误。

谢谢,金

堆栈跟踪:在 System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) 在 System.Collections.Hashtable.set_Item(Object key, Object value) 在 System.ComponentModel.TypeDescriptor.CheckDefaultProvider(Type type) 在 System .ComponentModel.TypeDescriptor.NodeFor(Type type, Boolean createDelegator) at System.ComponentModel.TypeDescriptor.GetDescriptor(Type type, String typeName) at System.ComponentModel.TypeDescriptor.GetAttributes(Type componentType) at System.Web.UI.ThemeableAttribute.IsTypeThemeable (类型类型)位于 System.Web.UI.Control.ApplySkin(页面)位于 System.Web.UI.Control.InitRecursive(控件命名容器)位于 System.Web.UI.Control.InitRecursive(控件命名容器)位于 System.Web .UI.Control.InitRecursive(控件命名容器) 在 System.Web.UI.Control.InitRecursive(控件命名容器) 在 System.Web.UI.Control.InitRecursive(控件命名容器) 在 System.Web.UI.Page.ProcessRequestMain(布尔) includeStagesBeforeAsyncPoint、布尔值 includeStagesAfterAsyncPoint)