【发布时间】:2013-02-23 02:36:06
【问题描述】:
将产品升级到 .NET 4.5 后,我们的网站出现了一些奇怪的行为。我会尽量具体,但问题很模糊,所以请多多包涵。此外,对于这种情况,请在没有遵循最佳实践的假设下工作。
用户正在访问一个页面,该页面以异步方式对 Web 服务进行大量 jquery ajax 调用。由于此页面上糟糕的设计/编码,加载可能需要很长时间,但它确实提供了用户需要访问的子菜单。页面开始加载后,他们单击其中一个菜单选项以转到另一个页面。到目前为止没有什么特别的。
当我们在仅安装了 .NET 4.0 的机器上使用 perfmon 时,我们可以看到 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 长什么样子?
-
您是否尝试关闭您的回复?尝试 { Context.Response.End(); } 捕捉(ThreadAbortException 错误){ } 捕捉(异常错误){ }
-
@Sameh 我会尝试,但据我所知,我们使用它来将此数据添加到我们的 jquery ajax 调用中。我认为结束响应将结束它。
-
是否需要在只设置了内容类型的地方调用response.flush?可以移到条件块的末尾还是完全省略?
-
@LukeS 我来自 Microsoft .NET Framework 兼容性团队。如果您有重现该问题的示例项目,请通过 Microsoft dot com 的 netfx45compat 与我联系。我们很乐意看看。谢谢!
标签: jquery asp.net iis xmlhttprequest .net-4.5