將產品升級到.NET 4.5後,我們在網站上發現了一些奇怪的行爲。我會盡量做到儘可能具體,但問題是模糊的,請耐心等待。此外,對於這種情況,假設沒有遵循最佳做法進行工作。ASP.NET請求和.NET 4.5 - 奇怪行爲
用戶正在進入一個頁面,這個頁面會異步地向web服務發出一些jQuery Ajax調用。由於此頁面設計/編碼較差,因此可能需要永久加載,但它確實提供了用戶需要訪問的子菜單。一旦頁面開始加載,他們點擊一個菜單選項轉到另一頁面。迄今爲止沒有太特別的。
當我們使用性能監視器與.NET 4.0只裝一箱,我們可以看到ASP.NET請求去向上和向下,你所期望的:
當我們上安裝它一個安裝了.NET 4.5的盒子,我們得到:
在執行上面描述的工作流之後,請求就會掛起。不排隊;他們只是坐在那裏。經過進一步研究,我們注意到兩個不同頁面之間的點擊不僅僅是一個簡單的href,而是實際使用Response.Redirect(url)。
另外,這隻在使用IE時纔會發生。使用Firefox和Chrome時,這不是問題。
這裏是我們到目前爲止已經試過:
- 我們接觸過M $並送他們出去DebugDiag資料轉儲。還在等待。
- 我已經去了IIS,設置網站跟蹤失敗的請求,並設置了一個失敗的請求過濾器給我一切。一旦網站鎖定,我清除日誌,然後檢查網站鎖定後發生的情況。每次它在AspNetSessionDataBegin和AspNetSessionDataEnd事件之間掛起。
- 我們確實有一個讀/寫會話的HttpHandler,禁用它似乎可以解決大部分問題,但沒有解釋爲什麼。
- jquery的onunload處理程序,它應該清理並中止所有剩餘的xmlhttp請求,似乎不會不斷執行。
- 安裝了這個patch,仍然沒有幫助。
- 我們目前正在將此導航邏輯中的Response.Redirect(url)方法更改爲Response.Redirect(url,false); (往上看)。
同樣的要求,這裏是HttpHandler的代碼:
public class KeepSessionAliveHttpHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
if (context.Session.IsNewSession)
{
string redirectUrl = context.Request.Url.AbsoluteUri.Replace(context.Request.Url.AbsolutePath, VirtualPathUtility.ToAbsolute(Constant.Page_Logout));
context.Response.Clear();
context.Response.ContentType = "application/json; charset=utf-8";
context.Response.Flush();
context.Response.Write("{\"IsSessionAlive\": \"false\", \"RedirectUrl\": \"" + redirectUrl + "\"}");
}
else
{
context.Session["KeepSessionAlive"] = TimeZoneHelper.GetCurrentUtcDateTime();
context.Response.Clear();
context.Response.ContentType = "application/json; charset=utf-8";
context.Response.Flush();
context.Response.Write("{\"IsSessionAlive\": \"true\"}");
}
}
}
上,我們應該看看接下來有什麼建議?
是什麼的樣子HttpHandler的? – Nate 2013-03-07 18:30:42
您是否試圖關閉您的回覆?嘗試{Context.Response.End(); }趕上(ThreadAbortException ERR){ } 趕上(例外錯誤){} – Sameh 2013-03-07 19:28:24
@Sameh我會試試看,但是從我們使用這個我可以告訴這個數據預先考慮到我們的jQuery AJAX調用。結束迴應將結束它,我假設。 – Schandlich 2013-03-07 19:45:18