在ASP.NET中,我在页面上使用jQuery AJAX卸载到POST处理程序。这个按预期工作 - AJAX在页面卸载时触发...除非我在页面上停留超过60秒。之后,页面关闭时,AJAX POST似乎不会触及服务器。它在我的本地主机上正常工作,但不在我们的开发或qa环境中。在卸载后处理程序的AJAX POST在ASP.NET中60秒后不工作
Fiddler在处理程序被调用时不显示任何内容或给我一个通用的401。我写了一个简单的测试脚本来使用AJAX每隔30秒ping一次服务器,以防我们遇到某种超时或NTLM令牌过期,但没有骰子。我们可以在服务器上看到ping,但是除非在60秒之前启动,否则我们无法在服务器上看到AJAX POST。
这是AJAX POST。它最初只是使用jQuery.post(),但我想尝试设置withCredentials为true以查看是否是这个问题(它没有帮助)。
jQuery(window).bind("unload.audit", function() {
jQuery.ajax({
type: "POST",
url: "IndicativeDataAuditHandler.axd?HasUnsavedChanges=" + _hasUnsavedChanges() + "&PageTitle=" + document.title,
xhrFields: { withCredentials: true }
});
});
下面是在Web.config的处理程序入口:
<add name="IndicativeDataAuditHandler" path="IndicativeDataAuditHandler.axd"
verb="POST, HEAD" type="Namespace.Namespace, App_Code" preCondition="integratedMode"/>
而这里的(重要部件)的处理程序代码。它称CSLA对象。
public class IndicativeDataAuditHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
try
{
var applicationID = new Guid(ConfigurationManager.AppSettings["ApplicationID"]);
var referrerUrl = context.Request.UrlReferrer.ToString();
IndicativeDataAuditLogCommand.InsertAuditLog(applicationID, GetPageTitle(context), referrerUrl, GetHasUnsavedChanges(context), GetPartyID(context), GetUserID(context));
}
catch(Exception ex)
{
throw new Exception("Failed to send indicative data edit request log.", ex);
}
}
//Some private methods here to get parameters
}
任何想法或可能的解释为什么这可能会发生?