ASP.NET的IIS5与IIS6.0


  本文标签:IIS5与IIS6.0 ASP.NET

  自从有了html与http,就有了浏览器与Web服务器,并有了Web应用,最初的交互模式是这样的:

交互模式

  该模式很好地运行了很多年  。然而,随着计算机应用的发展,人们越来越不满足于只有静态内容的页面,而由某种机制动态产生html等代码的需求越来越迫切,于是,很多技术就应运而生,ASP.NET就是这样一种技术  。从本质上讲,ASP.NET就是一种服务器端动态产生html、css、javascript等浏览器认识的代码的技术  。ASP.NET的交互模式如下:

ASP.NET的交互模式

  由该图可知,ASP.NET必须解决两大问题,一是如何与Web服务器(一般就是指IIS)进行交互,二是如何根据不同请求产生不同的html等代码  。

  第一个问题,根据IIS版本(5,6.0,7.0)的不同,ASP.NET具有不同的进程模式与不同的交互模式,该问题不是本篇要讲述的  。一般来说,大家不必关心该问题,而且要了解该问题,又必须清楚IIS各个版本的模型,而各个版本又各有各的不同,因此,我基本不准备讲述这个问题,大家有兴趣的话,可以自行搜索相关资料  。

  我们来讨论第二个问题,这里首先要说明的是,因为IIS7.0进程模式的变化比较大,我也没去了解IIS7.0的模型,因此,以下讲述及以后讲述将只针对IIS5与IIS6.0.我们有理由认为,针对IIS5与IIS6.0的讲述一般同样适用于IIS7.0.

  先且按下该问题不表,我们来看一段请求玉帝把大象放到冰箱里的代码(为什么不是上帝?因为我中华不归上帝管),请大家先跟着我的思路来,别急,别急  。

  1. usingSystem;  
  2.  
  3. namespaceConsoleApplication3  
  4. {  
  5. classProgram  
  6. {  
  7. staticvoidMain(string[]args)  
  8. {  
  9. Emperoremperor=newEmperor();  
  10. while(true)  
  11. {  
  12. Console.WriteLine("首先给玉帝准备好大象和冰箱  。");  
  13.  
  14. Console.WriteLine("输入大象的名字:");  
  15. stringelephantName=Console.ReadLine();  
  16. Console.WriteLine("输入大象的体重:");  
  17. intintelephantWeight=int.Parse(Console.ReadLine());  
  18. Console.WriteLine("输入冰箱的名字:");  
  19. stringrefrigeratorName=Console.ReadLine();  
  20.  
  21. Elephantelephant=newElephant()  
  22. {  
  23. Name=elephantName,  
  24. Weight=elephantWeight 
  25. };  
  26. Refrigeratorrefrigerator=newRefrigerator()  
  27. {  
  28. Name=refrigeratorName 
  29. };  
  30.  
  31. Contextcontext=newContext()  
  32. {  
  33. Elephant=elephant,  
  34. Refrigerator=refrigerator 
  35. };  
  36.  
  37. emperor.ProcessRequest(context);  
  38.  
  39. Console.WriteLine("是否要玉帝继续把大象关进冰箱里?");  
  40. stringanswer=Console.ReadLine();  
  41. if(answer=="n")  
  42. break;  
  43. }  
  44. }  
  45. }  
  46.  
  47. classEmperor  
  48. {  
  49. publicvoidProcessRequest(Contextcontext)  
  50. {  
  51. Elephantelephant=context.Elephant;  
  52. Refrigeratorrefrigerator=context.Refrigerator;  
  53.  
  54. //第一步,打开冰箱门  
  55. refrigerator.IsOpen=true;  
  56. Console.WriteLine(string.Format("玉帝打开了{0}的冰箱门  。",
    refrigerator.Name));  
  57.  
  58. //第二步,把大象放进去  
  59. refrigerator.Content=elephant;  
  60. Console.WriteLine(string.Format("玉帝把大象{0}放到冰箱{1}里了  。",
    elephant.Name,refrigerator.Name));  
  61.  
  62. //第三步,关上冰箱门  
  63. refrigerator.IsOpen=false;  
  64. Console.WriteLine(string.Format("玉帝关上了{0}的冰箱门  。",
    refrigerator.Name));  
  65. }  
  66. }  
  67.  
  68. classElephant  
  69. {  
  70. publicstringName{get;set;}  
  71. publicintWeight{get;set;}  
  72. }  
  73.  
  74. classRefrigerator  
  75. {  
  76. publicstringName{get;set;}  
  77. publicboolIsOpen{get;set;}  
  78.  
  79. privateobjectm_Content;  
  80. publicobjectContent  
  81. {  
  82. get{returnthis.m_Content;}  
  83. set  
  84. {  
  85. if(!this.IsOpen)  
  86. thrownewInvalidOperationException("冰箱门未打开,无法放进东西  。");  
  87. if(this.m_Content!=null)  
  88. thrownewInvalidOperationException("冰箱内有东西,无法放进新的东西  。");  
  89.  
  90. this.m_Content=value;  
  91. }  
  92. }  
  93. }  
  94.  
  95. classContext  
  96. {  
  97. publicElephantElephant{get;set;}  
  98. publicRefrigeratorRefrigerator{get;set;}  
  99. }