²úÆ·¼ò½é
Äú¿´µ½¹ý³öÉ«µÄ¿§·ÈµêµêÔ±ËÍ¿§·ÈµÄÇé¾°Âð£¿ÄǼòÖ±¾ÍÊÇ¿§·È¶¹¡¢ÕôÆûºÍÅ£Ä̵÷ºÍ¿§·ÈÒûÁÏÔÚÌø¾«²ÊµÄ°ÅÀÙ£¬ÌøÔ¾×ű¼Ïò½¹¼±µÈºòµÄ¹Ë¿Í¡£È»¶ø£¬¼´±ãÊÇ×îºÃµÄµêԱż¶ûÒ²»á³öÏÖÎÊÌâ¡£±ÈÈçÁ½¸öµ¥×ÓÔÚ´¦Àíʱ¸ã»ìÁË£¬½á¹ûË͵½ÄúÃæÇ°µÄÊÇÒ»± Soy latte¡£Ò²¿ÉÄÜÊDZ×ÓÉÏÁú·É·ïÎèµÄÁʲÝ×Ö¼£¸ù±¾¾ÍÊÇд´íÁË£¬»òÕßµêÔ±Àí½â´íÁË¡£ÓÐÈËÒªÁËÒ»±¡°±å¸ßÆæÈô¡±£¨¿¨ÆÕÆäŵ£©£¬¿ÉÁ¯µÄµêÔ±½Ê¾¡ÄÔÖҲŪ²»¶®¹Ë¿Íµ½µ×Òªµãʲô¡£Èç¹û³öÏÖÁËÀàËÆµÄÎÊÌ⣬¾Í±ØÐëÍ£Ö¹´¦Àí£¬È»ºóÔÙÖØÐ¿ªÊ¼¡£ºÃµÄ·þÎñÔ±¿ÉÄÜ»áÍÆÑÓÒ»ÏÂÏÖÓеÄÒªÇ󣬶øÓÅÐãµÄ·þÎñԱȴÄܹ»ÔÚûÈ˲ì¾õµÄÇé¿öÏÂ×öµ½ÕâÒ»µã¡£
Microsoft® ASP.NET ÔÚϵͳ¿É¿¿ÐÔ·½ÃæÈ¡µÃÁËÓÅÓÚÆäÈκξºÕù¶ÔÊÖµÄ¾Þ´ó½ø²½¡£È»¶ø£¬¾ÍÏñÄÇλ³öÉ«µÄµêÔ±Ò»Ñù£¬ASP.NET ż¶ûÒ²»á³öÏÖÎÊÌâ¡£ÐÒÔ˵ÄÊÇ£¬ASP.NET ÊǷdz£ÓÅÐãµÄ·þÎñÆ÷¡£ËüÄÜÔÚºǫ́ѸËÙÉú³ÉеĽø³Ì£¬È»ºó´¦ÀíÇëÇó¡£Í¨³£Ö»»áÔÚÇëÇóÒ³ÃæÊ±·¢ÉúÒ»µãÓû§ÉõÖÁ¿ÉÄܶ¼²»»á×¢Òâµ½µÄÇá΢ÑÓ³Ù¡£
¶ø ASP.NET ϵͳµÄ¹ÜÀíÔ±¿ÉÄÜÐèÒªÖªµÀ·¢ÉúÁËʲô¡£Í¬Ñù£¬ËûÃÇÒ²ÏëÁ˽âÊÇʲôÔÒòµ¼ÖÂÁ˽ø³Ìʧ°Ü¡£ÐÒÔ˵ÄÊÇ£¬Ê¹Óà .NET Framework Àà¿âÎĵµÖÐµÄ ProcessInfo ºÍ ProcessModelInfo Àà±ã¿É»ñµÃÏà¹ØÐÅÏ¢¡£±¾ÎÄÖУ¬ÎÒÃǽ«Ñ§Ï°ÈçºÎ´´½¨ ASP.NET HTTP ´¦Àí³ÌÐò£¬ÒÔʹÓÃÕâЩ¶ÔÏó²é¿´ Web Õ¾µãʹÓõĽø³ÌµÄÔËÐÐ×´¿öºÍ¹Ø±Õ×´¿ö¡£ÁíÍ⣬ÎÒÃǽ«´´½¨Ò»¸öÅäÖýڴ¦Àí³ÌÐò£¬ÕâÑùÎÒÃDZãÄܹ»ÔÚ°²×°´¦Àí³ÌÐòºó¶ÔÆä½øÐÐÅäÖá£
ÎÒÃǽ«¿´µ½Ê²Ã´£¿
ASP.NET ½ø³Ì¸ºÔð±àÒëºÍ¹ÜÀíËùÓÐÏò ASP.NET Ò³ÃæÌá³öµÄÇëÇó¡£ÀíÏë×´¿öÏ£¬´Ë½ø³ÌÓ¦¸ÃʼÖÕ´æÔÚÓÚ·þÎñÆ÷ÖУº»îÔ¾µØ½ÓÊÕÇëÇó¡¢±àÒëÒ³Ãæ²¢·µ»Ø HTML¡£È»¶ø£¬ÓÉÓÚ´æÔÚÐí¶à¿ÉÄÜÓ°Ïì½ø³ÌµÄDZÔÚʼþ£¬ÎÒÃDz»µÃ²»Ãæ¶Ô Web ¿ª·¢µÄÕæÊµ×´¿ö¡£¿ª·¢ÈËÔ±¿ÉÄÜδÄÜÕýÈ·´¦ÀíÄÚ´æÐ¹Â©»òÏß³ÌÎÊÌ⣻·þÎñÆ÷¿ÉÄܻᶪʧÓë½ø³ÌµÄÁ¬½Ó£»»òÕßÉõÖÁ»áÒòΪÔÚ Web.config ÎļþµÄ
ÓÉÓÚ ASP.NET ½ø³Ì¶ÔÒ³Ãæ´¦ÀíÈç´ËÖØÒª£¬Òò´Ë¼àÊÓÕâЩ½ø³ÌͬÑùÖØÒª¡£Ê¹Óà ProcessInfo ºÍ ProcessModelInfo Àà¿ÉÒԲ鿴µ±Ç°ºÍÒÔǰ½ø³ÌµÄÓÐЧÆÚºÍÔËÐÐ×´¿ö¡£Í¼ 1 ËùʾΪÔÚ±¾ÎÄÖд´½¨µÄ½ø³ÌÁÐ±í¡£
ͼ 1£ºWeb ·þÎñÆ÷µÄ½ø³ÌÀúÊ·¼Ç¼
ProcessInfo class ´æ´¢Á˸ø¶¨½ø³ÌµÄÊý¾Ý¡£²»µÃ×ÔÐд´½¨ ProcessInfo À࣬µ«¿ÉÒÔʹÓà ProcessModelInfo class À´¼ìË÷ ProcessInfo ¶ÔÏó¡£±í 1 ËùʾΪ ProcessInfo ÀàµÄÖØÒªÊôÐÔ¡£
±í 1£ºProcessInfo ÀàµÄÊôÐÔ
ÊôÐÔ Êý¾ÝÀàÐÍ ËµÃ÷
Age TimeSpan ½ø³ÌÔËÐУ¨»òÔø¾ÔËÐУ©µÄ×Üʱ¼ä¡£Èç¹ûÕâ¸öÖµ³¬³öÁËÔÚ Web.Config ÎļþµÄ processModel ½ÚÖеij¬Ê±ÉèÖ㬿ɵ¼ÖÂÖØÐÂÆô¶¯½ø³Ì¡£
PeakMemoryUsed Integer ´Ë½ø³ÌËùÓÃÄÚ´æµÄ×î´óÖµ£¨ÒÔ MB Ϊµ¥Î»£©¡£Èç¹ûÕâ¸öÖµ³¬³öÁËÔÚ Web.Config ÎļþµÄ processModel ½ÚÉèÖÃµÄ memoryLimit ¼¶±ðÉèÖ㬿ɵ¼Ö½ø³ÌÖØÐÂÆô¶¯¡£
ProcessID Integer ²Ù×÷ϵͳʹÓÃ´Ë ID À´±êʶ½ø³Ì¡£Ã¿¸ö½ø³Ì¾ùÓÐΨһµÄ ID£¨ÔÚ½ø³ÌÔËÐÐʱ£©¡£
RequestCount Integer ½ø³Ì½ÓÊÕµ½µÄÒ³ÃæÇëÇóµÄÊýÁ¿¡£Èç¹ûÕâ¸öÖµ³¬³öÁËÔÚ Web.Config ÎļþµÄ processModel ÖÐ requestLimit µÄ¼¶±ðÉèÖ㬿ɵ¼Ö½ø³ÌÖØÐÂÆô¶¯¡£
ShutdownReason ProcessShutdownReason ´Ëö¾Ù¶¨Òå½ø³ÌÖØÐÂÆô¶¯µÄ¿ÉÄÜÔÒò¡£ÓйؿÉÄܵÄÖµ£¬Çë²ÎÔıí 2¡£
StartTime DateTime ½ø³ÌÆô¶¯µÄʱ¼ä¡£
Status ProcessStatus ´Ëö¾Ù¶¨Òå ASP.NET ¸¨Öú½ø³ÌµÄµ±Ç°×´Ì¬¡£´ËÖµ¿ÉÄÜΪ Alive£¨»î¶¯£©¡¢ShuttingDown£¨½ø³ÌÒѽÓÊÕµ½¹Ø±ÕÇëÇ󣩡¢ShutDown£¨½ø³ÌÒÑÕý³£¹Ø±Õ£©»ò Terminated£¨½ø³ÌÒѱ»ÆÈ¹Ø±Õ£©¡£
ij½ø³Ì¹Ø±Õºó£¬¹Ø±ÕÔÒò½«±»ÉèÖÃΪ ProcessShutdownReason Enumeration ÖеÄijһ¸öÖµ¡£
±í 2£º½ø³Ì¹Ø±ÕµÄ¿ÉÄÜÔÒò
Öµ ˵Ã÷
None ´ËÖµ±íÃ÷½ø³ÌÈÔÔÚÔËÐС£
Timeout ½ø³ÌÒòÆäÉú´æÆÚ³¬³öÁËÔÚ Web.Config ÎļþµÄ processModel ½ÚÖÐÉèÖõij¬Ê±Öµ¶øÖØÆô¡£Èç¹ûÕâÖÖÇé¿öƵ·±·¢Éú£¬Ò²ÐíÓ¦¿¼ÂÇÔö¼Ó³¬Ê±Öµ¡£²»¹ý£¬Ò»°ãÀ´ËµÒòÕâÖÖÔÒò¶øÖØÐÂÆô¶¯¿ÉÒÔ½ÓÊÜ¡£
IdleTimeout ½ø³ÌÖØÐÂÆô¶¯µÄÔÒòÊÇȱÉÙ¿Í»§¶Ë¡£Èç¹ûÔÚ Web.Config ÎļþµÄ processModel ½ÚÖÐµÄ idleTimeout ÖµËùÉèÖõÄʱ¼äÆÚÏÞÄÚûÓпͻ§¶ËÇëÇ󣬽«·¢Éú´ËÀàÖØÐÂÆô¶¯¡£Õâͨ³£Ò²ÊÇ¿ÉÒÔ½ÓÊܵÄÖØÐÂÆô¶¯µÄÔÒò¡£
RequestsLimit ½ø³ÌÖØÐÂÆô¶¯µÄÔÒòÊǽÓÊÕµ½µÄÇëÇóÊýÁ¿³¬¹ýÁËÔÚ Web.Config ÎļþµÄ processModel ½ÚÖÐÉèÖõÄÖµ (requestLimit)¡£Ò»°ãÀ´Ëµ£¬ÕâÖÖÖØÐÂÆô¶¯µÄÔÒòÒ²¿ÉÒÔ½ÓÊÜ£¬Ö÷ÒªÓÃÓÚÄúÏ£Íû½ø³Ìż¶ûÖØÐÂÆô¶¯µÄÇé¿ö¡£
MemoryLimitExceeded ½ø³ÌÖØÐÂÆô¶¯µÄÔÒòÊÇÒòΪ³¬³öÁËͨ¹ý Web.Config ÎļþÖÐµÄ memoryLimit ÖµÉèÖõÄÄÚ´æÏÞÖÆ¡£Õâͨ³£±íʾ½ø³ÌµÄij¸ö ASP.NET Ó¦ÓóÌÐò²¿·Ö·¢ÉúÁËÎÊÌ⣨¿ÉÄÜÊÇÄÚ´æÐ¹Â©£©¡£Èç¹û´ËÀàÏÖÏ󯵷±·¢Éú£¬Çë¼àÊÓÿ¸ö Web Ó¦ÓóÌÐòµÄÄÚ´æÊ¹ÓÃÊÇ·ñÕý³£¡£
RequestQueueLimit ½ø³ÌÖØÐÂÆô¶¯µÄÔÒòÊÇÔڵȺòÏìÓ¦µÄÇëÇó×ÜÊý³¬³öÁË Web.Config ÎļþµÄ requestQueueLimit Öµ¡£Í¨³£ÕâÊÇijЩÇé¿ö½«µ¼Ö Web ·þÎñÆ÷ÑÓ³ÙµÄÐźš£¿ÉÄÜÐèÒªÔö¼ÓÄÚ´æ»ò·þÎñÆ÷£¬»òÌá¸ßÇý¶¯Æ÷»ò´¦ÀíÆ÷µÄËÙ¶È¡£
DeadlockSuspected ½ø³ÌÖØÐÂÆô¶¯µÄÔÒòÊÇ¿ÉÄÜÍ£Ö¹ÁËÕýÔÚ´¦ÀíµÄÇëÇó¡£ÕýÈçÕâ¸ö¹Ø±ÕÔÒòµÄÃû³ÆÄÇÑù£¬×î¿ÉÄܵ¼ÖÂÕâÖÖÇé¿öµÄÔÒòΪ£ºÈç¹ûÁ½¸ö»ò¶à¸öÏß³ÌÐèÒªÁíÒ»¸öÏß³ÌÍê³Éºó²ÅÄܼÌÐø½øÐУ¨ÀýÈç A Ïß³ÌÐèÒª B Ïß³ÌÍê³ÉÏòijÎļþµÄдÈëºó²ÅÄܼÌÐø½øÐУ¬¶øÍ¬Ê± B Ïß³ÌÐèÒª A Ïß³ÌÍê³É¼ÆËãºó²ÅÄܼÌÐø½øÐУ©£¬ÎÒÃǽ«ÕâÖÖÇé¿ö³ÆÎªÏ̴߳¦ÓÚ¡°Deadlock¡±£¨ËÀËø£©×´Ì¬¡£Èç¹ûÓÐÕâÖÖ¿ÉÄÜ£¬½ø³Ì½«Òò´Ë¶ø¹Ø±Õ¡£Ò»°ãÀ´Ëµ£¬Äú¿Ï¶¨²»Ï£Íû¿´µ½ÕâÖֹرÕÔÒò£¬Èç¹ûÄú²»ÐÒ¿´µ½ÁË£¬Çë²é¿´ÔÚÓ¦ÓóÌÐòÖÐʹÓõÄËùÓÐÏ̴߳¦Àí»ò×ÊԴʹÓÃÇé¿ö¡£
PingFailed µ± ASP.NET ¸¨Öú½ø³Ì¹ÜÀíÒ³ÃæÊ±£¬ÓÐʱ»áÊÕµ½´Ó IIS ½ø³Ì·¢À´µÄ ping ÒÔÈ·¶¨ÊÇ·ñÈÔÐèÒª´Ë½ø³Ì¡£Èç¹û ping ʧ°Ü£¬Ôò IIS ½ø³Ì¿ÉÄÜ»á¹Ø±Õ¸Ã ASP.NET ½ø³Ì¡£Õâ¸ö¹Ø±ÕÔÒò˵Ã÷ÁË¿ÉÄÜÔÚ·þÎñÆ÷½ÓÊÕÏûÏ¢µÄ¹ý³ÌÖÐȷʵ´æÔÚͨÐÅÎÊÌâ»ò ASP.NET ¸¨Öú½ø³ÌÒòijÖÖÔÒò¶øÍ£Ö¹¹¤×÷¡£
Unexpected Ò»°ãÀ´Ëµ£¬Äú¿Ï¶¨²»Ïë¿´µ½´ËÏûÏ¢£¬ÒòΪËü±íÃ÷ÊÇ¡°Ä³ÖÖÆäËûÔÒò¡±ÖÕÖ¹ÁË ASP.NET ¸¨Öú½ø³Ì¡£³ýÁ˼àÊÓÿ¸ö½ø³Ì»ò¶ÔËùÓÐÔËÐÐÖеĴúÂëÖ´ÐдúÂëУ¶Ô£¬¼¸ºõûÓÐÈκΰ취½â¾ö´ËÎÊÌâ¡£
´´½¨½ø³Ì²é¿´´¦Àí³ÌÐò
ÔÚ ASP.NET ÖУ¬Ö÷ҪʹÓÃÁ½ÖÖ·½·¨À´´´½¨ HTTP ´¦Àí³ÌÐò¡£µÚÒ»ÖÖÊÇͨ¹ý´´½¨´øÓÐ ASHX À©Õ¹ÃûµÄÎļþ£¬ÁíÒ»ÖÖÊÇ´´½¨ÊµÏÖ System.Web.IHttpHandler µÄÀ࣬Çë²ÎÔÄ IHttpHandler Interface¡£±¾ÎĽ«×ÅÖØ½éÉܵڶþÖÖÐÎʽ¡£Òª´´½¨ HTTP ´¦Àí³ÌÐò£¬ÐèÒª´´½¨Ò»¸ö³ÌÐò¼¯£¨Í¨³£ÊÇÒ»¸ö´úÂë¿âÏîÄ¿£©ºÍÒ»¸öʵÏÖ System.Web.IHttpHandler µÄÀࡣȻºó½«¸ÃÀà×¢²áµ½ Web.Config£¨»ò machine.config£©ÎļþÖУ¬È»ºóËü¾Í¿ÉÒÔ½ÓÊÕÇëÇóÁË¡£Èç¹û²é¿´ machine.config Îļþ£¨ÔÚÏàÓ¦ÃüÃûµÄ httpHandlers ½ÚÖУ©£¬½«¿´µ½Ðí¶àµ±Ç°ÒÑ×¢²áµÄ HTTP ´¦Àí³ÌÐò£¬°üÀ¨ System.Web.UI.PageHandlerFactory£¨ASP.NET Ò³ÃæµÄÖ÷´¦Àí³ÌÐò£©¡£ÔÚ±àд HTTP ´¦Àí³ÌÐòʱ£¬Æäʵ¾ÍÊÇÔÚ¶¨Òå´¦ÀíÇëÇóµÄз½·¨¡£
ËùÓÐ HTTP ´¦Àí³ÌÐò¾ùͨ¹ýʵÏÖ System.Web.IHttpHandler Interface À´´´½¨¡£´Ë½Ó¿ÚÐèÒª´´½¨Ò»¸öÊôÐÔºÍÒ»¸ö·½·¨£¬Èç±í 3 Ëùʾ¡£
±í 3£ºIHttpHandler ½Ó¿ÚµÄ³ÉÔ±
³ÉÔ± ÀàÐÍ ËµÃ÷
IsReusable ÊôÐÔ (Boolean) È·¶¨¸Ã´¦Àí³ÌÐòµÄʵÀýÊÇ·ñ¿ÉÒÔÖØ¸´Ê¹Óá£Í¨³££¬¸ÃÊôÐÔÓ¦·µ»Ø true£¬³ý·Ç´¦Àí³ÌÐòÐèÒª¶Ôij¸ö×ÊÔ´µÄ¶ÀÕ¼·ÃÎÊ¡£
ProcessRequest ·½·¨ HTTP ´¦Àí³ÌÐòµÄ¡°Ö÷¡±·½·¨¡£½«ÔÚ´ËÌí¼Ó¶ÔÇëÇóµÄËùÓд¦Àí¡£¸ÃÀà´«µÝµ±Ç° ASP.NET ÉÏÏÂÎÄ¡£¿ÉÒÔ´Ó´ËÉÏÏÂÎÄÖмìË÷ÇëÇó¶ÔÏóºÍÏìÓ¦¶ÔÏó¡£
ʵÏÖ IHttpHandler
´´½¨ HTTP ´¦Àí³ÌÐòµÄ´óÁ¿¹¤×÷¼¯ÖÐÔÚʵÏÖ´¦Àí³ÌÐòµÄ ProcessRequest¡£Í¨³££¬ÐèÒª´æ´¢µ±Ç°ÉÏÏÂÎĵÄÇëÇóºÍÏìÓ¦¶ÔÏó£¬È»ºóʹÓÃÏìÓ¦¶ÔÏóµÄ±àд·½·¨´´½¨Êä³ö¡£ÒÔϸø³öÁËÓÃÓÚ½ø³Ì²é¿´´¦Àí³ÌÐòµÄ ProcessRequest ×ÊÔ´µÄ Microsoft Visual Basic® .NET Ô´¡£
Public Sub ProcessRequest(ByVal context As HttpContext) _
Implements IHttpHandler.ProcessRequest
_context = context
_writer = New HtmlTextWriter(context.Response.Output)
'we only want to do this if we're enabled
If _config.Enabled Then
_writer.WriteLine("")
_writer.WriteLine("
")_writer.WriteLine(Me.StyleSheet)
_writer.WriteLine("")
_writer.WriteLine("
")_writer.WriteLine("")
'write content here
'create table
Dim t As New Table()
With t
.Width = Unit.Percentage(100)
.CellPadding = 0
.CellSpacing = 0
End With
'the meat of the routine
'make certain this is a destination machine
If (PermittedHost(_context.Request.UserHostAddress)) Then
CreateHeader(t)
AddProcesses(t)
CreateFooter(t)
Else
CreateErrorReport(t)
End If
'write to the stream
t.RenderControl(_writer)
_writer.WriteLine("\r\n\r\n")
End If
End Sub
ProcessRequest µÄʵÏÖ»á´æ´¢µ±Ç°ÉÏÏÂÎĺͱàдÕß¡£È»ºó£¬Ëüͨ¹ý³ÊÏÖÒ³ÃæµÄÆðʼ HTML ±êÇ©½«Ð嵀 HTML Ò³Ãæ´´½¨ÎªÊä³ö¡£ÏÂÒ»²½£¬Ëü½«´´½¨Ò»¸öÓÃÓÚ¸ñʽ»¯Êä³öµÄ±í¸ñ¡£×îºó£¬Èç¹ûÆôÓÃÁË´¦Àí³ÌÐò£¬²¢ÇÒ·¢³öÇëÇóµÄ¿Í»§¶ËÊǺϷ¨µÄ IP µØÖ·Ö®Ò»£¬Ôòͨ¹ýÒÔÏÂÈýÖÖ·½·¨´´½¨Êä³ö£º CreateHeader¡¢AddProcesses ºÍ CreateFooter¡£ÕâЩ·½·¨½«ÏàÓ¦µÄÖµ³ÊÏÖÔÚ±í¸ñµÄµ¥Ôª¸ñÖС£ÕâЩ´úÂëÓкܴóÒ»²¿·ÖÊÇÖØ¸´µÄ£¬ÎªÁ˼ò¶ÌÆð¼û£¬ÒÔϽö¸ø³öÁË AddProcesses ¼°ÆäÏà¹ØµÄ·½·¨¡£
Private Sub AddProcesses(ByVal table As _
System.Web.UI.WebControls.Table)
Dim procs As ProcessInfo() = _
ProcessModelInfo.GetHistory(_config.RequestLimit)
Dim row As TableRow
_list = New ProcessInfoCollection
For Each proc As ProcessInfo In procs
row = AddRow(table)
_list.Add(proc)
AddCell(row, proc.ProcessID.ToString())
AddCell(row, proc.Status.ToString())
AddCell(row, proc.StartTime.ToString("g"))
AddCell(row, FormatAge(proc.Age))
AddCell(row, proc.PeakMemoryUsed.ToString("N0") + " MB")
AddCell(row, proc.RequestCount.ToString("N0"))
AddCell(row, proc.ShutdownReason.ToString())
Next
End Sub
Private Function AddCell( _
ByVal row As System.Web.UI.WebControls.TableRow, _
ByVal text As String) As System.Web.UI.WebControls.TableCell
Dim c As New TableCell()
c.Text = text
row.Cells.Add©
Return c
End Function
ϸÐĵģ¨ºÍÓм¼Êõ±³¾°µÄ£©¶ÁÕß¿ÉÄÜÒѾעÒâµ½£¬ÎÒÍêÈ«¿ÉÒÔͨ¹ý³ÊÏÖ DataGrid ²¢½« ProcessInfoCollection °ó¶¨µ½ DataGrid À´¼ò»¯´Ë´úÂ룬µ«ÄÇÑù¾ÍʧȥÁ˱àд³ÌÐòµÄÀÖȤ¡£
°²×° HTTP ´¦Àí³ÌÐò
´´½¨Íê HTTP ´¦Àí³ÌÐòºó£¬±ØÐë½øÐа²×°²ÅÄÜʹÓá£Õâ°üÀ¨Ê¹Àà¿ÉÓ㬲¢ÔÚÅäÖÃÎļþÖÐÌí¼ÓÏàÓ¦µÄÐÅÏ¢ÒÔ¼¤»î´¦Àí³ÌÐò¡£
Èç¹û´´½¨µÄÊǽö±»µ¥¸ö vroot ʹÓõļòµ¥´¦Àí³ÌÐò£¬Ôò¿ÉÒÔ½« DLL ¸´ÖÆÖÁ¸Ã vroot µÄ bin Ŀ¼¼´¿ÉʹÓøÃÀà¡£Èç¹û´´½¨ÁËÒ»¸öÓɶà¸ö vroot ʹÓÃµÄ HTTP ´¦Àí³ÌÐò£¨ÀàËÆÓÚ ProcessHandler£©£¬Ôò´Ë´¦Àí³ÌÐò±ØÐë°²×°µ½È«¾Ö³ÌÐò¼¯»º´æ (GAC) ÖС£Òª½«´Ë´¦Àí³ÌÐò°²×°µ½ GAC ÖУ¬Àà±ØÐë¾ßÓÐÑϸñÃû³Æ¡£Òª¾ßÓÐÑϸñÃû³Æ£¬Ëü±ØÐëÓйØÁªµÄÑϸñÃû³Æ¼ü¡£±ØÐëʹÓÃÃüÁîÐпÉÖ´ÐÐÎļþ sn.exe ´´½¨ÑϸñÃû³Æ¼üÎļþ¡£Óйش˳ÌÐòµÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ NET Framework Tools ÎĵµµÄ Strong Name Tool (Sn.exe) Ò»½Ú¡£
´¦Àí³ÌÐò¿ÉÓúó£¬ÏÂÒ»²½¾ÍÊÇÌí¼ÓÅäÖÃÒÔʹÆä¿ÉÒÔ´¦ÀíÇëÇ󣬷½·¨ÊÇÔÚ Web.Config »ò machine.config ÎļþµÄ httpHandlers ½ÚÖÐÌí¼ÓÌõÄ¿¡£´ËÌõĿָ¶¨Á˽«Í¨¹ý´¦Àí³ÌÐò·ÓɵÄÎļþÀ©Õ¹ÃûºÍ²Ù×÷¡£½ø³Ì²é¿´´¦Àí³ÌÐòµÄÌõÄ¿ÈçÏÂËùʾ¡£
type="Microsoft.Samples.Msdn.Web.ProcessHandler, MsdnProcessHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f94c20bb90ce64" /> ´ËÌõÄ¿Òâζ×ÅÔÚij¸öÇëÇóʹÓÃÈκΠHTTP ÃüÁîѰÕÒ¡°Îļþ¡± process.axd£¨Êµ¼ÊÉϲ»´æÔÚ£©Ê±£¬Ëü½«ÏòλÓÚ³ÌÐò¼¯ MsdnProcessHandler ÖÐµÄ Microsoft.Samples.Msdn.Web.ProcessHandler Àà·¢ËÍÇëÇ󡣸ÃÀཫʵÏÖ IHttpHandler£¬È»ºóÓÉ IHttpHandler ¸ºÔðÉú³ÉÊä³ö¡£ Ìí¼ÓÅäÖà Ðí¶à ASP.NET Ó¦ÓóÌÐòʹÓà appSetting ±êÇ©Ìí¼Ó×Ô¶¨ÒåÅäÖá£Õâ¶ÔÓÚ´ó¶àÊýÓ¦ÓóÌÐòÀ´ËµÒѾÍêÈ«×ã¹»ÁË¡£È»¶ø£¬ÓÐʱӦÓóÌÐò¿ÉÒÔʹÓøüÓÐÕë¶ÔÐԵĽâ¾ö·½°¸¡£ÕâÖÖÇé¿öÏ£¬Äú¿ÉÒÔΪӦÓóÌÐòн¨½Ú¡£ н¨ÅäÖýڰüÀ¨Á½¸ö²½Öè¡£Ê×ÏÈ£¬±ØÐë´´½¨ÅäÖöÔÏ󡣴˶ÔÏó»ò½á¹¹¾ßÓбíʾËùÐèÅäÖÃÊý¾ÝµÄÊôÐÔ¡£´Ë¶ÔÏó¿ÉÒÔ¾ßÓС¢µ«Í¨³£²»¾ßÓÐÈκη½·¨¡£Æä´ÎÒª´´½¨Ò»¸ö½Ú´¦Àí³ÌÐò¡£´Ë½Ú´¦Àí³ÌÐò¸ºÔð´Ó web.congfig ÎļþÖжÁÈ¡ÏàÓ¦µÄÐÅÏ¢£¬²¢ÇÒ½«Æäת»¯ÎªÅäÖöÔÏó¡£ ProcessViewer µÄÅäÖöÔÏó¾ßÓÐËĸöÊôÐÔ£¬ÈçϱíËùÊö¡£ ±í 4£ºProcessViewer ÅäÖöÔÏóµÄÊôÐÔ ÊôÐÔ Êý¾ÝÀàÐÍ ËµÃ÷ Enabled Boolean Èç¹û ProcessViewer ¿ÉÓã¬ÔòΪ true¡£ÕâÑù±ã¿ÉÒÔÔÝʱ¹Ø±Õ´¦Àí³ÌÐò¶øÎÞÐ轫Æä´Ó web.config ÎļþÖÐɾ³ý¡£ LocalOnly Boolean Èç¹ûÖ»ÄÜ´Ó±¾µØ¼ÆËã»ú²é¿´ ProcessViewer µÄÊä³ö£¬ÔòΪ true¡£ÕâÊÇ×îΪ°²È«µÄ·½°¸£¬·ÀÖ¹ÆäËûÈ˲鿴 Web Ó¦ÓóÌÐòµÄ½ø³ÌÀúÊ·¼Ç¼¡£ RequestLimit Integer ¸ÃÊôÐÔÏÞ¶¨ÁËÏÔʾÏîÄ¿ÊýµÄ×î´óÖµ¡£ProcessModelInfo.GetHistory ×î¶à·µ»Ø 100 ¸öÏîÄ¿¡£´ËÊôÐÔÓÃÓÚÔÚÐèҪʱ¼õÉÙ´ËÊýÁ¿¡£ PermittedHosts String array Èç¹û LocalOnly Ϊ false£¬ÔòÈκμÆËã»ú¾ù¿ÉÒÔ·ÃÎÊ Process.axd handler À´²é¿´Ó¦ÓóÌÐòµÄ½ø³ÌÀúÊ·¼Ç¼¡£Õâ¾Í¿ÉÄÜ»áÓа²È«·çÏÕ¡£Òò´Ë£¬¿ÉÒÔ·ÖÅäÔÊÐí·ÃÎÊ´¦Àí³ÌÐòµÄ IP µØÖ·µÄÁÐ±í¡£´ËÊôÐÔ¿ÉÓÃÓÚÏÞÖÆ¶Ô¹ÜÀíÔ±¹¤×÷Õ¾µÄ·ÃÎÊ¡£ ´´½¨×Ô¶¨ÒåÅäÖõĵڶþ²½ÊÇ´´½¨½âÊÍÅäÖÃÎļþµÄ XML µÄÀ࣬²¢Ê¹ÓøÃÐÅÏ¢Ìî³äÅäÖöÔÏó¡£´ËÀà±ØÐëʵÏÖ System.Configuration.IConfigurationSectionHandler ½Ó¿Ú¡£´Ë½Ó¿ÚÖ»ÓÐÒ»¸ö·½·¨£¬³ÆÎª Create¡£ÒÔϸø³öÁË ProcessViewerSectionHandler µÄ Visual Basic .NET Ô´£¨Çë²ÎÔÄ C# Ô´µÄÏÂÔØ£©¡£ Public Function Create(ByVal parent As Object, _ ByVal configContext As Object, _ ByVal section As System.Xml.XmlNode) As Object _ Implements Configuration.IConfigurationSectionHandler.Create ' ½Ú¾ßÓÐÒÔϸñʽ£º ' ' localOnly="true|false" ' requestLimit="<=100" ' enabled="true|false" ' permittedHosts="comma-delimited list of IP addresses" /> Dim result New ProcessViewerConfiguration() Dim config As New ConfigurationHelper(section) Dim max As Integer Dim hosts As String Const delimiter As String = ", " Const MaximumReturnCount As Integer = 100 'È·ÈÏÉèÖ㬲¢É趨 result.Enabled = config.GetBooleanAttribute("enabled") result.LocalOnly = config.GetBooleanAttribute("localOnly") max = config.GetIntegerAttribute("requestLimit") If max <= MaximumReturnCount Then result.requestLimit = max End If hosts = config.GetStringAttribute("permittedHosts") result.PermittedHosts = hosts.Split(delimiter.ToCharArray()) Return result End Function Create ·½·¨´«µÝÁËÈý¸ö¶ÔÏó£º parent - ±íʾ¸¸ÅäÖýڣ¨Èç¹û¿ÉÓã©¡£ configContext - ±íʾ HttpConfigurationContext ¶ÔÏ󣬼´ Web ÅäÖõÄÊ£Óಿ·Ö¡£¿ÉÒÔʹÓô˶ÔÏó´Óµ±Ç° web.config ÎļþÖмìË÷Öµ¡£ section - ×îÎªÖØÒªµÄ²ÎÊý£¬Êµ¼ÊµÄÅäÖýڡ£Ê¹Óô˶ÔÏóÌî³äÅäÖöÔÏó¡£ ÒÔÉÏ´úÂëʹÓÃÁË ConfigurationHelper ¶ÔÏ󡣴˶ÔÏóÊÇÒ»¸öÓÃÓÚ´Ó½ÚÖмìË÷ÌØ¶¨Êý¾ÝÀàÐ͵ļòµ¥¶ÔÏó¡£´ËÀàµÄ´úÂëÈçÏÂËùʾ¡£ Friend Class ConfigurationHelper Dim _section As XmlNode Public Sub New(ByVal configSection As XmlNode) _section = configSection End Sub '½ÓÊÜ true/false¡¢yes/no Public Function GetBooleanAttribute(ByVal name As String) As Boolean Dim value As String Dim result As Boolean value = GetStringAttribute(name).ToLower() If ((Boolean.TrueString.ToLower() = value) _ OrElse (value = "yes")) Then result = True Else result = False End If Return result End Function Public Function GetIntegerAttribute(ByVal name As String) As Integer Dim value As String Dim result As Integer value = GetStringAttribute(name) result = Int32.Parse(value) Return result End Function Public Function GetStringAttribute(ByVal name As String) As String Dim theAttribute As XmlAttribute Dim result As String theAttribute = _section.Attributes(name) If Not theAttribute Is Nothing Then result = theAttribute.Value End If Return result End Function End Class ҪʹÓÃÕâ¸ö½Ú´¦Àí³ÌÐòºÍÅäÖöÔÏ󣬱ØÐ뽫Æä×¢²áÔÚÏàÓ¦µÄ ASP.NET ÅäÖÃÎļþÖС£ÒòΪ¿ÉÒÔÔÚÈκνø³ÌÖе÷ÓøÃÀ࣬ËùÒÔ×îºÃ½«ÆäÌí¼Óµ½ machine.config ÎļþÖС£ÔÚ machine.config ÀàµÄ configSection ½ÚÖеÄÏàӦλÖÃ×¢²á½Ú´¦Àí³ÌÐò£¨ÎÒ½«ÆäÌí¼Óµ½ÁË system.web ½ÚÖУ© ... other sections type="Microsoft.Samples.Msdn.Web.ProcessViewerSectionHandler, MsdnProcessHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f5f94c20bb90ce64" /> ×¢²áÍê±Ïºó£¬±ã¿ÉÒÔÏò machine.config ÎļþÖÐÌí¼Ó½Ú£¬²¢ÇÒ¸ÃÀཫ³ÉΪ¿ÉÅäÖÃÀà¡£ С½á ´´½¨ HTTP ´¦Àí³ÌÐò¿ÉÒÔÌṩ³¬³ö ASP.NET. ¹¦ÄܵÄÇ¿ÓÐÁ¦»úÖÆ£¬Ê¹µÃ¿ª·¢Õ߱ܿªÒ³ÃæÄ£ÐÍ£¬²¢´´½¨¡¢Ð޸ĻòÀ©Õ¹ Web Õ¾µãµÄÄÚÈÝ¡£Í¨¹ýÌí¼ÓÓÃÓڲ鿴 ASP.NET µÄ½ø³ÌÀúÊ·¼Ç¼µÄ HTTP ´¦Àí³ÌÐò£¬¿ÉÒÔÕï¶Ï´úÂë»ò·þÎñÆ÷Öе¼Ö¿ͻ§Í¶ËßµÄÎÊÌ⣬ÀýÈç´úÂëÖдæÔÚÄÚ´æÐ¹Â©»òδ´¦ÀíµÄÒì³££¬»ò·þÎñÆ÷µÄÄÚ´æ²»×ã¡£ ´´½¨²¢°²×° HTTP ´¦Àí³ÌÐòºó£¬Äú½«¿ÉÒÔ¸üÃôÈñµØ·¢ÏÖÔÚ´ËÖØÒª½ø³ÌÖз¢ÉúµÄ×´¿ö¡£µ½Ê±ºòÄú¾Í»áÓÐʱ¼äÀ´ºÈ±¿§·È£¬¶ø²»ÊÇæÓÚ×·²é Web Õ¾µã½ø³ÌÖØÐÂÆô¶¯µÄÔÒòÁË¡£

