在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
}
任何想法或可能的解釋爲什麼這可能會發生?