¡¾·±ÌåÖÐÎÄ¡¿
¡¾ÉèΪÊ×Ò³¡¿
¡¾¼ÓÈëÊղء¿
µ±Ç°Î»Öãº.Net¼¼ÊõÊ×Ò³ >> Asp.Net¿ª·¢ >> ×Ô¶¨ÒåHttp´¦Àí¼°Ó¦ÓÃÖ®HttpHandlerƪ

×Ô¶¨ÒåHttp´¦Àí¼°Ó¦ÓÃÖ®HttpHandlerƪ

2007-10-15 08:00:00  ×÷Õߣº  À´Ô´£º»¥ÁªÍø  ä¯ÀÀ´ÎÊý£º0  ÎÄ×Ö´óС£º¡¾´ó¡¿¡¾ÖС¿¡¾Ð¡¡¿
¼ò½é£ºÔÚ¿ª·¢»ùÓÚMicrosoft IISµÄÓ¦ÓÃʱ£¬¿ª·¢Õß³ýÁË¿ÉÒÔ±àдASP³ÌÐòÍ⣬»¹¿ÉÒÔʹÓÃVisual C++µÈ¿ª·¢¹¤¾ß£¬¿ª·¢ISAPIÓ¦Óã¬ÒÔ»ñÈ¡¸üΪǿ´óµÄ¹¦ÄÜ¡£¿ÉÒÔ±àдÁ½ÖÖISAPIÀ©Õ¹£ºÒ»ÖÖÊÇISAPI Server Extention£¬ÁíÒ»ÖÖÊÇISAP...

ÔÚ¿ª·¢»ùÓÚMicrosoft IISµÄÓ¦ÓÃʱ£¬¿ª·¢Õß³ýÁË¿ÉÒÔ±àдASP³ÌÐòÍ⣬»¹¿ÉÒÔʹÓÃVisual C++µÈ¿ª·¢¹¤¾ß£¬¿ª·¢ISAPIÓ¦Óã¬ÒÔ»ñÈ¡¸üΪǿ´óµÄ¹¦ÄÜ¡£¿ÉÒÔ±àдÁ½ÖÖISAPIÀ©Õ¹£ºÒ»ÖÖÊÇISAPI Server Extention£¬ÁíÒ»ÖÖÊÇISAPI Filter£¬µ«ÊÇ£¬ISAPIÀ©Õ¹Ó¦Óõıàдͨ³£¶Ô¿ª·¢ÕßÓбȽϸߵÄÒªÇ󣬿ª·¢ºÍ²¿ÊðµÄÄÑ¶È±È½Ï´ó¡£ ÔÚ¿ª·¢ASP.NetÓ¦ÓÃʱ£¬ÎÒÃÇÈÔÈ»¿ÉÒÔ±àдISAPIÓ¦Óã¬ÒÔÀ©³äIISµÄ¹¦ÄÜ£¬µ«ÊÇ£¬ASP.NetΪÎÒÃÇÌṩÁËÁíÍâÒ»ÖÖÑ¡Ôñ¡ª¡ªÊ¹ÓÃHTTP Handler ºÍHTTP Module¡£ÕâÊÇͨ¹ýʹÓÃIHttpHandler ºÍ IHttpModule½Ó¿ÚÀ´ÊµÏֵġ£HTTP HandlerÌṩÁËÀàËÆÓÚISAPI Server ExtentionµÄ¹¦ÄÜ£¬¶øHttpModuleʵÏÖÁËÀàËÆÓÚISAPI FilterµÄ¹¦ÄÜ£¬²¢ÇÒ£¬±ÈISAPI£¬ÔÚ¿ª·¢ºÍ²¿ÊðÉ϶¼Òª¼òµ¥µÄ¶à¡£ Ó¦ÓÃHttpHandlerºÍHttpModule£¬Ê¹Ó¦ÓóÌÐò¿ÉÒÔÓëIIS Web·þÎñÆ÷µÄµÍ¼¶±ðÇëÇóºÍÏìÓ¦·þÎñ½»»¥¡£±¾ÎÄÊ×ÏȽéÉÜHttpHandlerºÍHttpModuleµÄ¸ÅÄîºÍ»ù±¾Ê¹Ó÷½·¨£¬²¢½éÉÜÁËÒ»¸öÓ¦ÓÃHttpModuleʵÏÖȨÏÞϵͳµÄ°¸Àý¡£

HTTP ´¦Àí¹ÜµÀµÄ»ù±¾Ä£ÐÍ

Òª¶ÔHttpModuleºÍIHttpHandler½øÐÐÑо¿£¬±ØÐëÏȶÔASP.NetµÄ´¦Àí¹ÜµÀÓÐÒ»¸öÁ˽⡣ ÔÚASP.NetÓ¦ÓóÌÐòÖУ¬ÏµÍ³Ê¹ÓÃÒ»×éÏà¹ØµÄÀ࣬ͨ¹ýÒ»¶¨µÄ˳ÐòÀ´´¦Àí¿Í»§¶ËµÄÇëÇó(Request)£¬ASP.NETÓ¦ÓóÌÐòµÄ´¦Àíģʽ¿É³ÆÖ®ÎªHTTP´¦Àí¹ÜµÀ¡£HttpModuleºÍIhttpHandler¾ÍÊÇÕâ¸ö´¦Àí¹ÜµÀÉϵÄÁ½¸ö´¦Àí»·½Ú¡£ HTTP´¦Àí¹ÜµÀÖеÄÀàÔÚSystem.WebÃû³Æ¿Õ¼äÖж¨Ò壬Ö÷ÒªÓÐÒÔÏÂÀàÐÍ£º · HttpWorkerRequest ³éÏóÀඨÒåÁËASP.NetÒ³Ãæ´¦ÀíÇëÇóµÄ»ù±¾·½·¨£» · HttpRuntime ÌṩÁË´¦ÀíÓ¦ÓõÄÒ»×é·þÎñ£» · HttpContext ±£´æÁË´¦ÀíÒ»´ÎÇëÇóµÄËùÓÐÏà¹ØÉÏÏÂÎÄÐÅÏ¢£» · HttpApplicationFactory ÌṩÏà¹ØÄ¿Â¼µÄÓ¦ÓóÌÐò£» · HttpApplication ¶¨ÒåÁËËùÓÐASP.NetÓ¦ÓóÌÐòµÄͨÓõķ½·¨¡¢ÊôÐÔºÍʼþ¡£Õâ¸öÀàÒ²ÊÇÔÚÓû§ÔÚglobal.asaxÎļþÖж¨ÒåµÄÓ¦ÓõĻùÀࣻ · Modules ´¦ÀíÇëÇóǰºÍÏìÓ¦ºóµÄʼþ£» · HandlerFactories ÌṩӦÓóÌÐòÖеÄHandlers£» · Handlers ´¦ÀíÇëÇóºÍÏìÓ¦¡£ HTTP´¦Àí¹ÜµÀµÄÄ£ÐÍÈçÏ£º

ͼ1£ºHTTP ´¦Àí¹ÜµÀ

ÔÚWindowsƽ̨ÉÏ£¬HTTP PiplineÐèÒªIISµÄÖ§³Ö¡£ÎªÁËÔËÐÐASP.NETÓ¦Óã¬IISÐèÒªÒÔÏÂÁ½¸öÎļþ£ºASPNET_ISAPI.DLLºÍASPNET_WP.EXE · ASPNET_ISAPI.DLLÊÇÒ»¸öISAPI ExtentionËû½«·¢ÏòIISµÄÇëת½»ASPNET_WP.EXE´¦Àí · ASPNET_WP.EXEʹÓÃHttpRuntime¶ÔÇëÇó½øÐоßÌå´¦Àí ´¦ÀíµÄ¹ý³Ì¿ÉÒÔÓÃͼ±íʾÈçÏ£º

ͼ2£ºIISÉϵÄHTTP´¦Àí¹ÜµÀ

HttpHandlerµÄʵÏÖ

HttpHandlerʵÏÖÁËÀàËÆÓÚISAPI ExtentionµÄ¹¦ÄÜ£¬Ëû´¦ÀíÇëÇó(Request)µÄÐÅÏ¢ºÍ·¢ËÍÏìÓ¦(Response)¡£HttpHandler¹¦ÄܵÄʵÏÖͨ¹ýʵÏÖIHttpHandler½Ó¿ÚÀ´´ïµ½¡£Êµ¼ÊÉÏ£¬ÎÒÃÇÔÚ±àдASP.NetÒ³ÃæÊ±£¬ASP.NetÒ³ÃæËù¼Ì³ÐµÄ»ùÀࡪ¡ªSystem.Web.UI.Page¡ª¡ªÒ²ÊµÏÖÁËHttpHandler½Ó¿Ú£¬Ò²ÊÇÒ»¸öHttpHandler£¬¿´Ò»ÏÂËüµÄ¶¨Òå¾ÍÖªµÀÁË£¨C#£©£º

public class Page : TemplateControl, IhttpHandler

½Ó¿ÚIHttpHandlerµÄ¶¨ÒåÈçÏ£º

interface IHttpHandler

{

void ProcessRequest(HttpContext ctx);

bool IsReuseable { get; }

}

½Ó¿ÚÖÐProcessRequestÊÇÌí¼Ó×Ô¼ºµÄ´úÂ룬½øÐÐÏàÓ¦´¦ÀíµÄµØ·½¡£IsReuseableÊôÐÔÖ¸Ã÷¸ÃHttpHandlerµÄʵÏÖÀàÊÇ·ñÐèÒª»º´æ¡£ ÏÂÃæµÄʾÀýչʾÁËHttpHandlerµÄ»ù±¾Ê¹Ó㺠1¡¢½¨Á¢Ò»¸öÃûΪMyNameSpaceµÄ¹¤³Ì£¬Ìí¼ÓÒ»¸öÀ࣬Ãû³ÆÎªMyHandler£¬´úÂëÈçÏ£º

Àý1£º

namespace MyNameSpace

{

public class MyHandler : IHttpHandler

{

public void ProcessRequest(HttpContext ctx)

{

HttpResponse Response

Response.Write(This is my handler);}

public bool IsReusable

{

get { return true; }

}

}

}

2¡¢½«ÉÏÃæµÄ´úÂë±àÒ룬Éú³ÉMyNameSpace.DllÎļþ£» 3¡¢½¨Á¢Ò»¸öеÄWebApplicationÏîÄ¿£¬»ò´ò¿ªÒ»¸öWebApplicationÏîÄ¿£¬½«ÎļþMyNameSpace.DllÌí¼Óµ½ÏîÄ¿µÄÒýÓÃÖУ¬»ò¸´ÖƵ½ÏîÄ¿µÄbinĿ¼Ï£» 4¡¢ÐÞ¸ÄWeb.Config£¬Ìí¼ÓÈçÏÂÄÚÈÝ:

type= MyNameSpace.MyHandr, MyNameSpace />

ÅäÖÃÎļþÖеÄÑ¡Ïî˵Ã÷£º · verb¿ÉÒÔÊÇGET»òPOST£¬±íʾ¶ÔGET»òPOSTµÄÇëÇó½øÐд¦Àí¡£*±íʾ¶ÔËùÓÐÇëÇó½øÐд¦Àí¡£ · PathÖ¸Ã÷¶ÔÏàÓ¦µÄÎļþ½øÐд¦Àí£¬*.ASPx±íʾ¶Ô·¢¸øËùÓÐASPXÒ³ÃæµÄÇëÇó½øÐд¦Àí¡£¿ÉÒÔÖ¸Ã÷·¾¶£¬Èç/test/*.ASPx£¬±íÃ÷Ö»¶ÔtestĿ¼ÏµÄASPXÎļþ½øÐд¦Àí¡£ · TypeÊôÐÔÖУ¬¶ººÅǰµÄ×Ö·û´®Ö¸Ã÷HttpHandlerµÄʵÏÖÀàµÄÀàÃû£¬ºóÃæµÄ×Ö·û´®Ö¸Ã÷DllÎļþµÄÃû³Æ¡£ ÏÖÔÚ£¬ÇëÇóÏîÄ¿ÖеÄÈκÎASPXÒ³Ãæ£¬Ò³ÃæÉÏÏÔʾµÄʼÖÕÖ»ÓÐÈçÏÂÒ»ÐÐ×Ö£º

This is my handler

ÒòΪ£¬ÎÒÃÇ×Ô¶¨ÒåµÄHandler½Ø»ñÁËËùÓз¢ÏòASPXÒ³ÃæµÄÇëÇ󣬲¢ÇÒÓÃ×Ô¼ºµÄµÄ·½·¨À´´¦ÀíÕâЩÇëÇóÁË¡£ ΪÁËʹÎÒÃǵÄASPXÒ³ÃæÄܹ»Ë³ÀûÔËÐУ¬ÎÒÃÇÐèÒªÐÞ¸ÄWeb.ConfigÎļþ£º

type= MyNameSpace.MyHandr,hander />

ΪÁËÈöԺó׺ÃûΪ.fooµÄÎļþµÄÇëÇóÄܹ»±»ÎÒÃǵÄHandler½Ø»ñÔËÐУ¬ÎÒÃÇ»¹ÐèҪһЩ¶îÍâµÄ¹¤×÷¡£´ò¿ªIISµÄ¹ÜÀí¿ØÖÆÌ¨£¬ÓÖ¼üµ¥»÷Õ¾µã£¬Ñ¡ÔñÊôÐÔ£¬Ìø³öÕ¾µãµÄÊôÐÔ¶Ô»°¿ò¡£Ñ¡ÔñÖ÷Ŀ¼ѡÏî¡£Èçͼ3£º

ͼ3£ºWebÕ¾µãÊôÐÔ¶Ô»°¿ò

Ñ¡ÔñÅäÖ㬵¯³öÓ¦ÓóÌÐòÅäÖöԻ°¿ò£¬½«.fooÌí¼Óµ½Ó¦ÓóÌÐòÓ³ÉäÖУ¬Èçͼ4£º

ͼ4£ºÌí¼ÓÓ¦ÓóÌÐòÓ³Éä

ºÃÁË£¬ÎÒÃÇÏÖÔÚ¿ÉÒÔÔÚÏîÄ¿ÖÐÌí¼ÓÒ»¸ö.fooÎļþ£¬µ±Ïò¸ÃÎļþ·¢ËÍÇëÇóʱ£¬ä¯ÀÀÆ÷ÏÔʾ£º

This is my handler

¶ø¶ÔÆäËûASPXÎļþµÄ·ÃÎʲ»ÊÜÓ°Ïì¡£

ʵÏÖHandler Factory

ʵÏÖHttpHandler¹¦ÄܵÄÁíÍâÒ»¸öÑ¡ÔñÊÇʵÏÖÒ»¸öHandler Factory£¬ÕâÊÇͨ¹ýʵÏÖIHttpHandlerFactory½Ó¿ÚÀ´ÊµÏֵġ£ IHttpHandlerFactory½Ó¿ÚµÄ¶¨ÒåÈçÏ£º

interface IHttpHandlerFactory

{

IHttpHandler GetHandler(HttpContext ctx,

string requestType,

string url,

string pathTranslated);

void ReleaseHandler(IHttpHandler handler);

}

GetHandler·½·¨ÔÚÇëÇó¿ªÊ¼µÄʱºò±»µ÷Ó㬶øReleaseHandlerÔÚÇëÇó½áÊø£¬ËùÓеÄHandler¶¼²»ÔÙÐèÒªµÄʱºò±»µ÷ÓᣠʹÓÃHttpHandlerFactoryµÄ¹ý³ÌÒ»°ãÈçÏ£º Ê×Ïȶ¨Òåʵ¼Ê´¦ÀíHttpHandlerµÄÀ࣬Õâ¸öÀà»áÔÚHandlerFactoryÖб»µ÷ÓÃÒÔ½øÐÐʵ¼ÊµÄ´¦Àí£º

public class BasicHandler : IHttpHandler { ... }

È»ºó£¬¶¨Òå×Ô¼ºµÄHandlerFactory£º

public class BasicHandlerFactory : IHttpHandlerFactory

{

public IHttpHandler GetHandler(HttpContext ctx,

string requestType,

string url,

string pathTranslated)

{

return new BasicHandler();

}

public void ReleaseHandler(IHttpHandler handler) {}

}

×îºó£¬ÔÚWeb.ConfigÎļþÖÐ×¢²áÕâ¸öFactory£º

type=MyNamespace.BasicHandlerFactory, MyAssembly />

Òì²½Handler

ͨ¹ýʵÏÖIHttpAsyncHandler¿ÉÒÔʵÏÖ¶ÔHTTPÇëÇóµÄÒì²½´¦Àí¡£IHttpAsyncHandler½Ó¿Ú¼Ì³ÐIHttpHandler£¬Ò²ÐèҪʵÏÖProcessRequest ·½·¨ºÍ IsReusable ÊôÐÔ£¬Í¬Ê±£¬ÐèҪʵÏÖ BeginProcessRequest ºÍ EndProcessRequest ·½·¨¡£BeginProcessRequest Æô¶¯Òì²½µ÷ÓÃÒÔ´¦Àíµ¥¸öµÄ HTTP ÇëÇ󣬶ø EndProcessRequest ÔòÔڸýø³Ì½áÊøÊ±Ö´ÐÐÇåÀí´úÂë¡£ IHttpAsyncHandlerµÄʵÏÖºÍ×¢²áͬIHttpHandlerÀàËÆ£¬¶ÁÕß¿ÉÒԲο¼MSDNµÄÏà¹ØÎĵµ¡£ ÏÖÔÚ£¬´ó¼ÒÊÇ·ñ¶ÔHTTP HandlerµÄ¸ÅÄîºÍÓ¦ÓÃÓÐÁËÒ»¶¨µÄÁ˽⣿ÔÚÏÂһƪÎÄÕÂÖУ¬ÎÒÃǽ«Ö÷Òª½éÉÜHTTP ModuleµÄµÄÓ¦Ó㬲¢¸ø³öʹÓÃHttpModuleʵÏÖȨÏÞϵͳµÄʵÀý¡£ ¡¡

×öÈËÒªºñµÀ£¬Çë×¢Ã÷ת×Ô¿áÍø¶¯Á¦(www.ASPCOOL.COM)¡£

ÔðÈα༭£ºadmin
±¾ÎÄÒýÓõØÖ·£º http://www.3pcode.com/net/2007/10/91165.htm
Ïà¹ØÎÄÕÂ