仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 673|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计ASP.NET底层架构探究的地方理哀求

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:45:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?asp.net|架构|哀求  当一个哀求到来时,它被路由到ISAPIRuntime.ProcessRequest()办法.这个办法挪用HttpRuntime.ProcessRequest办法,它作一些主要的事变(用Reflector检察System.Web.HttpRuntime.ProcessRequestInternal办法):

  ・为哀求创立一个新的HttpContext实例

  ・猎取一个HttpApplication实例

  ・挪用HttpApplication.Init()办法来设置管道的事务

  ・Init()办法触发入手下手ASP.NET管道处置的HttpApplication.ResumeProcessing()办法。

  起首一个新的HttpContext工具被创立并用来传送ISAPIWorkerRequest(ISAPIECB的包装器).这个高低文在全部哀求的性命周期总都是可用的并总能够经由过程静态属性HttpContext.Currect来会见.正像名字所表示的那样,HttpContext工具代表了以后举动哀求的高低文由于他包括了在哀求性命周期中一切典范的你必要会见的主要工具:Request,Response,Application,Server,Cache.在哀求处置的任什么时候候HttpContext.Current给你会见一切这些的才能.

  HttpContext工具也包括一个十分有效的Items汇合,你能够用它来保留针对特定哀求的数据.高低文工具在哀求周期的入手下手时被创立,在哀求停止时被开释,一切在Items汇合中保留的数据只在这个特定的哀求中可用.一个很好的利用的例子是哀求日记机制,当你经由过程想经由过程在Global.asax中挂接Application_BeginRequest和Application_EndRequest办法纪录哀求的入手下手和停止工夫(象在列表3中显现的那样).HttpContext对你就十分有效了-假如你在哀求或页面处置的分歧部分必要数据,你自在的利用它.

  列表3-利用HttpContext.Items汇合使你在分歧的管道事务中保留数据

protectedvoidApplication_BeginRequest(Objectsender,EventArgse)
{
 //***RequestLogging
 if(App.Configuration.LogWebRequests)
  Context.Items.Add("WebLog_StartTime",DateTime.Now);
}

protectedvoidApplication_EndRequest(Objectsender,EventArgse)
{
 //***RequestLogging
 if(App.Configuration.LogWebRequests)
 {
  try
  {
   TimeSpanSpan=DateTime.Now.Subtract((DateTime)Context.Items["WebLog_StartTime"]);
   intMiliSecs=Span.TotalMilliseconds;
   //doyourlogging
   WebRequestLog.Log(App.Configuration.ConnectionString,true,MilliSecs);
  }
 }
}
  一旦高低文被设置好,ASP.NET必要经由过程HttpApplication工具将收到的哀求路由到合适的使用程序/假造目次.每一个ASP.NET使用程序必需被设置到一个假造目次(大概Web根目次)并且每一个”使用程序”是被独自的处置的。

  HttpApplication相似典礼的仆人-它是处置举措入手下手的中央。

  域的仆人:HttpApplication

  每一个哀求都被路由到一个HttpApplication工具上.HttpApplicationFactory类依据使用程序的负载为你的ASP.NET使用创立一个HttpApplication工具池并为每一个哀求分发HttpApplication工具的援用.工具池的巨细受machine.config文件中ProcessModel键中的MaxWorkerThreads设置限定,默许是20个(译注:此处大概有误,依据Reflector反编译的代码,池的巨细应当是100个,假如池巨细小于100,HttpApplicationFactory会创立满100个,可是思索到会有多个线程同时创立HttpApplication的情形,实践情形下有大概会凌驾100个)。

  工具池以一个更小的数字入手下手;一般是一个然后增加到和同时产生的必要被处置的哀求数目一样.工具池被监督,如许在年夜负载下它大概会增添到最年夜的实例数目,当负载下降时会变回一个更小的数字。

  HttpApplication是你的Web程序的内部包装器,并且它被映照到在Global.asax内里界说的类上.它是进进HttpRuntime的第一个出口点.假如你检察Global.asax(大概对应的代码类)你会发明这个类间接承继自HttpApplication:

publicclassGlobal:System.Web.HttpApplication

  HttpApplication的次要职责是作为Http管道的事务把持器,以是它的接口次要包括的是事务.事务挂接长短常普遍的,包含以下这些:

  ・BeginRequest

  ・AuthenticateRequest

  ・AuthorizeRequest

  ・ResolveRequestCache

  ・AquireRequestState

  ・PreRequestHandlerExecute

  ・…HandlerExecution…

  ・PostRequestHandlerExecute

  ・ReleaseRequestState

  ・UpdateRequestCache

  ・EndRequest

  每一个事务在Global.assx文件中以Application_前缀开首的空事务作为完成.比方,Application_BeginRequest(),Application_AuthorizeRequest()..这些处置器为了便于利用而供应由于它们是在程序中常常被利用的,如许你就不必显式的创立这些事务处置托付了。

  了解每一个ASP.NET假造目次在它本人的使用程序域中运转,并且在使用程序域中有多个从ASP.NET办理的池中前往的HttpApplication实例同时运转,长短常主要的,这是多个哀求能够被同时处置而不相互妨害的缘故原由。

  检察列表4来取得使用程序域,线程和HttpApplication之间的干系。

  列表4-显现使用程序域,线程和HttpApplication实例之间的干系。

privatevoidPage_Load(objectsender,System.EventArgse)
{
 //Putusercodetoinitializethepagehere
 this.ApplicationId=((HowAspNetWorks.Global)HttpContext.Current.ApplicationInstance).ApplicationId;
 this.ThreadId=AppDomain.GetCurrentThreadId();

 this.DomainId=AppDomain.CurrentDomain.FriendlyName;

 this.ThreadInfo="ThreadPoolThread:"+System.Threading.Thread.CurrentThread.IsThreadPoolThread.ToString()+"<br>ThreadApartment:"+
System.Threading.Thread.CurrentThread.ApartmentState.ToString();


 //***Simulateaslowrequestsowecanseemultiple
 //requestssidebyside.
 System.Threading.Thread.Sleep(3000);
}
  这是随sample供应的demo的一部分,运转的了局在中显现.运转两个扫瞄器,翻开这个演示页面能够看到分歧的ID。





  -你能够经由过程同时运转多个扫瞄器来复杂的检察使用程序域,使用程序池实例和哀求线程是怎样交互的。当多个哀求同时倡议,你能够看到线程ID和使用程序ID变更了,可是使用程序域仍是统一个。

  你大概注重到在年夜多半哀求上,当线程和HttpApplicationID变更时使用程序域ID却坚持稳定,固然它们也大概反复(指线程和HttpApplicationID).HttpApplication是从一个汇合中掏出,在随后到来的哀求中能够被复用的,以是它的ID偶然是会反复的.注重Application实例其实不和特定的线程绑定-切实的说它们是被指定给以后哀求的举动线程。竟发现没有太大的帮助。总觉得要用起来,感觉到不了位。因为公司机器的原因,一直没有安装vs.net(也从来没有用过)。以前做asp的时候一直用DW(感觉其代码联想功能不错),可现在到了asp.net却不习惯了。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-24 11:46:04 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
admin 该用户已被删除
板凳
发表于 2015-2-1 09:50:03 | 只看该作者
在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。
变相怪杰 该用户已被删除
地板
发表于 2015-2-7 02:20:07 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
飘灵儿 该用户已被删除
5#
发表于 2015-2-19 19:31:28 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
6#
发表于 2015-3-6 15:19:43 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-13 03:09:51 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
分手快乐 该用户已被删除
8#
发表于 2015-3-20 11:18:28 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 14:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表