HttpHandler

7649 ワード

HttpModuleがIISのISAPI Filterに相当するとすれば、HttpHandlerはIISのISAPI Extensionに相当し、HttpHandlerはASP.NETではリクエストの最終処理者としての役割を果たす.異なるリソースタイプの要求に対して、ASP.NETは異なるHandlerをロードして処理する、つまり.aspx pageと.asmx webサービスに対応するHandlerは異なる.
すべてのHttpHandlerはインタフェースIHttpHandlerを実現した.次はIHttpHandlerの定義であり,メソッドProcessRequestは処理要求の実装を提供する.
   1: public interface IHttpHandler
   2: {
   3:     void ProcessRequest(HttpContext context);
   4:     bool IsReusable { get; }
   5: }

<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
いくつかのHttpHandlerについては、対応するHttpHandlerを作成または取得するために関連するHttpHandler Factoryがある.HttpHandlerFactory実装インタフェースIHttpHandlerFactoryは、GetHandlerが新しいHttpHandlerを作成したり、既存のHttpHandlerを取得したりするために使用されます.
   1: public interface IHttpHandlerFactory
   2: {
   3:     IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated);
   4:     void ReleaseHandler(IHttpHandler handler);
   5: }

<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}

.csharpcode .lnum { color: #606060; }
-->
HttpHandlerとHttpHandler Factoryのタイプは、同じようにWebに構成することができる.configで.次の構成は、3つの典型的なリソースタイプに対するHttpHandler構成を含む.aspx,.asmxと.svc.WCFサービスベースのHttpHandlerタイプはSystem.ServiceModel.Activation.HttpHandler.
   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration>
   3: <system.web>
   4: <httpHandlers>
   5: <add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
   6: <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True"/>
   7: <add path="*.asmx" verb="*" type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="False"/>
   8: </httpHandlers>
   9: </system.web>
  10: </configuration>