Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net MVC 4中的集合被修改错误_C#_Asp.net Mvc_Collections_Error Handling - Fatal编程技术网

C# asp.net MVC 4中的集合被修改错误

C# asp.net MVC 4中的集合被修改错误,c#,asp.net-mvc,collections,error-handling,C#,Asp.net Mvc,Collections,Error Handling,我正在尝试在ASP.NET MVC 4应用程序中查找以下错误的来源 Exception type: System.InvalidOperationException Exception message: Collection was modified; enumeration operation may not execute Stack trace: at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource

我正在尝试在ASP.NET MVC 4应用程序中查找以下错误的来源

Exception type: System.InvalidOperationException
Exception message: Collection was modified; enumeration operation may not execute

Stack trace: at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.Dictionary`2.Enumerator.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at System.Web.Mvc.MvcHandler.RemoveOptionalRoutingParameters()
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
问题是,在迭代集合的所有(少数)地方,我都没有以任何方式更改集合结构。堆栈跟踪没有那么大帮助,因为它不包含对我的代码的任何引用

我已经读了很多关于这个主题的帖子,基本上这就是他们提到的解决方案。
有人知道解决这个问题的其他方法吗?关于如何获取有关错误的更多信息,有什么提示吗?

nrod,为了完整起见,最好发布您的代码

但是,从堆栈跟踪中,我已经看到(MVC)框架(例如System.Web)中出现了错误。Í如果堆栈跟踪指向您自己的代码,则问题通常是由于在对集合进行迭代时(例如在foreach循环中)对集合进行了操作(例如删除、添加)。一些建议是以相反的方式进行迭代,或者对集合使用.ToList(),请参阅:

但是,堆栈跟踪表明问题来自代码对(MVC)框架的调用。在共享的自定义实现的IRoutHandler.GetHttpHandler()中使用实例成员变量可能会导致此类问题。这是因为实例成员不是线程安全的,如MSDN中所述:

堆栈跟踪表明您确实在使用成员变量。然后,在执行大量并发调用时(例如在生产环境中)可能会发生错误

您可以通过重构代码以不使用任何实例成员来修复此问题。这可能会导致代码过于单一和重复。例如,当重构为仅使用局部变量时。但您也可以尝试将use重构为公共静态成员或静态函数,因为它们是线程安全的


在我自己解决了这个问题之后,我决定总是对新代码进行一些负载测试,否则这些问题只能在生产中检测到

把你的代码放在这里,告诉我你尝试了什么?你有没有运行任何可能会改变值的反向线程?你必须发布代码——很可能是因为修改了闭包,或IEnumerable的延迟枚举。看起来您正在调用
字典上的
ToArray
,而在
ToArray
调用过程中有其他内容正在修改字典。可能的线程问题。我倾向于同意@Rawling,这一行
RemoveOptionalRoutingParameters
确实指出了这一点。也许我有一些路线…谢谢你的见解。我已经在这个方向上更改了我的自定义处理程序
public IHttpHandler GetHttpHandler(RequestContext RequestContext)
,似乎我已经修复了错误。。。