国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Asp.net請求處理之管道處理介紹

2024-07-10 12:41:20
字體:
來源:轉載
供稿:網友
在了解Asp.net請求處理流程的過程中,個人認為有必要從源代碼的角度來了解asp.net管道是怎么實現的。

在此之前大家有必要了解一些asp.net請求流程的基本東東,如ASP.NET 請求處理流程、Asp.net管道、ASP.NET管線與應用程序生命周期

我們大家都知道HttpRuntime主要的方法是

public static void ProcessRequest(HttpWorkerRequest wr)
代碼如下:
private void ProcessRequestInternal(HttpWorkerRequest wr)
{
HttpContext context;
try
{
context = new HttpContext(wr, false);
}
catch
{
wr.SendStatus(400, "Bad Request");
wr.SendKnownResponseHeader(12, "text/html; charset=utf-8");
byte[] bytes = Encoding.ASCII.GetBytes("<html><body>Bad Request</body></html>");
wr.SendResponseFromMemory(bytes, bytes.Length);
wr.FlushResponse(true);
wr.EndOfRequest();
return;
}
wr.SetEndOfSendNotification(this._asyncEndOfSendCallback, context);
Interlocked.Increment(ref this._activeRequestCount);
HostingEnvironment.IncrementBusyCount();
try
{
try
{
this.EnsureFirstRequestInit(context);
}
catch
{
if (!context.Request.IsDebuggingRequest)
{
throw;
}
}
context.Response.InitResponseWriter();
IHttpHandler applicationInstance = HttpApplicationFactory.GetApplicationInstance(context);
if (applicationInstance == null)
{
throw new HttpException(SR.GetString("Unable_create_app_object"));
}
if (EtwTrace.IsTraceEnabled(5, 1))
{
EtwTrace.Trace(EtwTraceType.ETW_TYPE_START_HANDLER, context.WorkerRequest, applicationInstance.GetType().FullName, "Start");
}
if (applicationInstance is IHttpAsyncHandler)
{
IHttpAsyncHandler handler2 = (IHttpAsyncHandler) applicationInstance;
context.AsyncAppHandler = handler2;
handler2.BeginProcessRequest(context, this._handlerCompletionCallback, context);
}
else
{
applicationInstance.ProcessRequest(context);
this.FinishRequest(context.WorkerRequest, context, null);
}
}
catch (Exception exception)
{
context.Response.InitResponseWriter();
this.FinishRequest(wr, context, exception);
}
}

我們看到里面有這么一句

IHttpHandler applicationInstance = HttpApplicationFactory.GetApplicationInstance(context);用來獲取HttpApplication,而HttpApplication實現了IHttpAsyncHandler接口public class HttpApplication : IHttpAsyncHandler, IHttpHandler, IComponent, IDisposable,最后調用application的BeginProcessRequest方法。
HttpApplicationFactory.GetApplicationInstance(context)主要是調用GetNormalApplicationInstance
代碼如下:
internal static IHttpHandler GetApplicationInstance(HttpContext context)
{
if (_customApplication != null)
{
return _customApplication;
}
if (context.Request.IsDebuggingRequest)
{
return new HttpDebugHandler();
}
_theApplicationFactory.EnsureInited();
_theApplicationFactory.EnsureAppStartCalled(context);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹿邑县| 武城县| 自贡市| 沐川县| 玛多县| 棋牌| 曲靖市| 英德市| 康平县| 仙桃市| 耒阳市| 尉犁县| 阳新县| 和静县| 巴彦淖尔市| 临洮县| 屯门区| 甘肃省| 阿合奇县| 济阳县| 武安市| 萨嘎县| 衡南县| 龙岩市| 渭南市| 颍上县| 桐城市| 宝兴县| 泾源县| 佛山市| 株洲市| 崇左市| 南和县| 女性| 土默特左旗| 新化县| 湘阴县| 鄱阳县| 新闻| 大悟县| 正宁县|