HTTP Pipeline

HTTP Pipeline



HTTP Pipeline
HTTP Pipeline



 

 

 

HttpContext

• The HttpContext class models HTTP message exchange
– Properties hold references to HttpRequest, HttpResponse, state management objects, etc.
– Current context always available to processing thread via static HttpContext.Current property

Integration with IIS

• By default, the server-side HTTP pipeline relies of IIS to receive and dispatch HTTP requests

  1. Requests dispatched through ISAPI extension, ASPNET_ISAPI.DLL
  2. ASPNET_ISAPI.DLL passes requests through named pipe to a worker process called ASPNET_WP.EXE
  3. ASPNET_WP.EXE processes requests using HttpRuntime–based pipeline
  4. Pipeline can be integrated with other web servers too

HttpContext - Integration with IIS

Implementing an HTTP handler

• HTTP handlers process request messages and generate response messages

– Handlers are simply classes that implement IHttpHandler interface
– ProcessRequest called when HTTP request targeting handler’s URI arrives
– HttpContext argument represents the HTTP request and corresponding response
– Handlers can be instantiated by default factory
– If handler’s IsReusable property is true, handler will be reused

interface IHttpHandler

{
void ProcessRequest(HttpContext ctx);
bool IsReuseable { get; }
}

namespace MyNamespace

{
      public class BasicHandler : IHttpHandler
     {
           public void ProcessRequest(HttpContext ctx)
          {
                 ctx.Response.ContentType = “text/xml”;
                 ctx.Response.Write(“”);
                 ctx.Response.Write(ctx.Request.ServerVariables[“PATH_INFO”]);
                 ctx.Response.Write(“”);
          }
         public bool IsReusable { get { return true; } }
    }
}

Deploying an HTTP handler

• Once an HTTP handler is implemented, it must be deployed

– Handler’s assembly must be put in target virtual directory’sbin subdirectory or GAC
– element must be added to virtual directory’s web.config file
– Entry must be added to virtual directory’s IIS script map

    
     

HTTP modules

• HTTP handlers allow you to extend the end of the HTTP serverside pipeline. HTTP modules allow you to extend the middle of the pipeline and examine and possibly modify HTTP messages as they pass by.

Implementing an HTTP module

• HTTP modules process events about HTTP request and response message progress through pipeline
– Modules are simply classes that implement IHttpModule
– Modules instantiated and used by HttpApplication objects to process HTTP requests
– Init/Dispose called to connect/disconnect module’s handlers to/from HttpApplication object’s events
– Specific event handlers added to module as needed

interface IHttpModule

{
      void Init(HttpApplication app);
      void Dispose();
}

public class MyModule : IHttpModule

{
      public void Init(HttpApplication httpApp)
     {
          httpApp.BeginRequest += new EventHandler(this.OnBeginRequest);
      }
      public void Dispose() {}
     // event handlers
     public void OnBeginRequest(object o, EventArgs ea)
    {
           HttpApplication httpApp = (HttpApplication) o;
           HttpContext ctx = (HttpContext) ea.ExtendedInfo;
          … // write your code here
      }

}
 

Deploying an HTTP module

• Once an HTTP module is implemented, it must be deployed
– Module’s assembly must be put in target virtual directory’s bin subdirectory or GAC
– element must be added to virtual directory’s web.config file

Leave a Reply