我想知道是否有人对这里发生的事情有线索,并可能指向正确的方向。ASP.NET MVC:这怎么可能?参数字典包含参数“x”的空条目
好的..lets将代码放在上下文中。
我有AJAX方法(jQuery的)类似这样:
$xmlHttp("/Api/GetWaitingMessages", { count: 20 })
.always(processResult);
($ XMLHTTP只是封装一个jQuery延迟执行,以及一些基本的$ AJAX选项)
而在我们healthmonitoring后台我见事情是这样的:
Exception information:
Exception type: System.ArgumentException
Exception message: The parameters dictionary contains a null entry for parameter 'count' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult GetWaitingMessages(Int32)' in 'AjaxController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
现在的事情是,我把一些痕迹&尝试/捕获(用于测试),以确保jQuery的永远不会调用GetWaitingMess年龄有一个空的或未定义的“计数”,但就healthmonitoring exeptions去:GetWaitingMessages被实例化并作为参数传递null。 (据我所知,MVC实例通过反射法)
BTW:该错误仅发生一样,也许1出成千上万的请求
GetWaitingMessages的签名是:
所以我想,MVC不应该击中该方法,因为应该没有签名匹配。
MVC是否有高流量网站(即多线程问题)的问题?
上述网站运行在具有网络负载平衡和IP关联性的5个Web服务器场服务器群集上。
每个服务器在高峰时间约有1500个请求/秒。
该网站使用的URL重写,因为它是一个可换肤&多种语言的白色标签网站地图域的区域(即test.com将只需插入/测试到URL)。
现场配置更多的细节:
,供应Ajax请求饰有
[SessionState(SessionStateBehavior.Disabled)]
的HttpModules但如认为是无用的,其中删除,因为我们需要运行控制器:runAllManagedModulesForAllRequests = MVC中的“true”。我可以设置runAllManagedModulesForAllRequests =“false”,然后尝试找出要添加的内容,按照哪个顺序,但发现只是删除我所知道的并不重要。
<remove name="AnonymousIdentification" />
<remove name="Profile" />
<remove name="WindowsAuthentication" />
<remove name="UrlMappingsModule" />
<remove name="FileAuthorization" />
<remove name="RoleManager" />
<remove name="Session" />
<remove name="UrlAuthorization" />
<remove name="ScriptModule-4.0" />
<remove name="FormsAuthentication" />
下面都激活和配置在web.config
<pages validateRequest="false" enableEventValidation="false" enableViewStateMac="true" clientIDMode="Static">
and also:
urlCompression
staticContent
caching
outputCache
编辑:只是分析了我跟踪日志的详细一点。当发生错误时,我看到(Content-Length:8),它对应于(count = 20)。但是,我没有看到日志中的任何查询参数。我将HttpInputStream转储到了日志中,而且它完全是空的......但就像我刚才提到的那样,日志也会说Content-Length = 8,所以这里有些错误。
难道IIS(最终URL重写)将它的东西的地方,一路上混淆?
-
任何帮助,将不胜感激..i'm撕扯我的头发试图了解可能被错误怎么回事。
谢谢,罗伯特
这里谈到因为是Q被删除:“我敢肯定,我没有看错了(不是我同意)..also找不到链接,但如果你在Google上搜索‘异步50ms的’” - 对,如果你的谷歌的“异步50毫秒”,你会发现一堆有关异步/等待和50毫秒,这与多线程编程无关的线程:-)“异步和等待关键字不会导致创建额外的线程” (c)中http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx#BKMK_Threads – zerkms 2013-07-08 04:43:34
当使用异步/等待你在逻辑使用函数与返回类型任务/任务的,其创建线程。所以虽然关键字并不意味着自己的多线程,但它们只能在多线程上下文中使用(Task <>)。 –
Robert
2013-07-08 14:20:26
对不起为是insistant,但我还没有看到一个异步/ AWAIT组合然而不等待任务<> – Robert 2013-07-08 14:23:29