Sch*_*ich 9 asp.net iis jquery xmlhttprequest .net-4.5
将产品升级到.NET 4.5后,我们在网站上遇到了一些奇怪的行为.我会尝试尽可能具体,但问题很模糊,所以请耐心等待.此外,对于这种情况,假设没有遵循最佳实践.
用户来到一个页面,该页面以异步方式向Web服务进行多次jquery ajax调用.由于此页面上的设计/编码较差,可能需要永久加载,但它确实提供了用户需要访问的子菜单.页面开始加载后,单击其中一个菜单选项转到另一个页面.到目前为止没什么特别的.
当我们在只安装了.NET 4.0的盒子上使用perfmon时,我们可以看到ASP.NET请求上下移动,正如您所期望的那样:
当我们将它安装在安装了.NET 4.5的盒子上时,我们得到:
执行上述工作流程后,请求挂断.没有排队; 他们只是坐在那里
经过进一步的研究,我们注意到两个不同页面之间的点击不仅仅是一个简单的href,而且实际上是在使用Response.Redirect(url);
此外,这仅在使用IE时发生.使用Firefox和Chrome时,这不是问题.
以下是我们迄今为止所尝试的内容:
同样根据要求,这里是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\"}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于我们下一步应该去哪看的任何建议?
Microsoft 现已发布以下补丁,似乎可以修复该问题,而无需更改 web.config 或 IIS 配置。 http://support.microsoft.com/kb/2828841/en-us http://support.microsoft.com/kb/2828842/en-us
经过 .NET 兼容性团队提供的进一步调查和见解/解决方案后,我正在编辑此答案。
如果 IE9 用户在调用正在进行时离开页面,在 ManagedPipelineHandler中找到的针对 AJAX POST 的解决方案似乎对我们来说更可靠。这是我们在 IE8-10 中遇到的行为,而不仅仅是 9。
我将在这里保留旧的答案,因为如果第一个答案不相关,它希望可以为人们指出另一个方向。
根源最终是会话锁定。AspNetSessionDataBegin 和 AspNetSessionDataEnd 事件应该是一个致命的赠品。对于遇到同样问题的任何人,请查看您何时以及如何写入会话。这些链接也有帮助。
我刚刚发现为什么所有 ASP.Net 网站都很慢,我正在尝试解决这个问题
归档时间: |
|
查看次数: |
1866 次 |
最近记录: |