我想知道是否有人對這裏發生的事情有線索,並可能指向正確的方向。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