ASP.NET ApplicationInstance.CompleteRequest не работает?
HttpContext.Current.ApplicationInstance.CompleteRequest, похоже, ничего не делает. Что мне не хватает?
Например, несмотря на то, что CompleteRequest вызывается во время каждого интересного события, все перечисленные ниже события все еще выполняются на простой тестовой странице.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace LifeCycle
{
public partial class _Default_NoMasterPage : System.Web.UI.Page
{
private int count = 0;
protected override void OnInit(EventArgs e)
{
nextLabel("InitBeforeBase");
base.OnInit(e);
HttpContext.Current.ApplicationInstance.CompleteRequest();
nextLabel("Init");
}
protected override void OnInitComplete(EventArgs e)
{
nextLabel("InitCompleteBeforeBase");
base.OnInitComplete(e);
HttpContext.Current.ApplicationInstance.CompleteRequest();
nextLabel("InitComplete");
}
protected override void OnLoad(EventArgs e)
{
nextLabel("OnLoadBeforeBase");
base.OnLoad(e);
HttpContext.Current.ApplicationInstance.CompleteRequest();
nextLabel("OnLoad");
}
protected override void OnLoadComplete(EventArgs e)
{
nextLabel("OnLoadCompleteBeforeBase");
base.OnLoadComplete(e);
HttpContext.Current.ApplicationInstance.CompleteRequest();
nextLabel("OnLoadComplete");
}
protected override void OnPreInit(EventArgs e)
{
// can't add a control to the page during OnPreInit as the other page control doesn't exist yet.
base.OnPreInit(e);
}
private void nextLabel(string eventName)
{
string lbl = "" + ++count + " " + eventName + " at " + DateTime.Now.ToLongTimeString() + "";
System.Web.UI.HtmlControls.HtmlGenericControl c = new HtmlGenericControl("div");
c.InnerText = lbl;
Page.Controls.Add(c);
}
}
}
1 ответ
Решение
Вот и получается, что у меня было принципиальное недопонимание полного запроса. CompleteRequest пропускает остальную часть цепочки конвейера HTTP IIS, но жизненный цикл события обработчика страниц ASP.NET завершается, потому что это всего лишь одна часть цепочки конвейера HTTP, и ничто не говорит этой части об остановке.