爱飞 发表于 2015-1-16 22:45:49

ASP.NET网页设计ASP.NET底层架构探究之再谈.NET运转时

计算机发展到这个时候,很多技术日益成熟,想学好一种技术都是不容易的,当你学会用的时候你对它的很多原理可能很不了解)asp.net|架构  在这里我们有一个在ISAPI扩大中举动的,可挪用的ISAPIRuntime工具的实例。每次运转时是启动的并运转着的时分(译注:绝对的,假如运转时并没有启动,就必要象上一章所说的那样载进运转时),ISAPI的代码挪用ISAPIRuntime.ProcessRequest()办法,这个办法是真实的进进ASP.NET管道的出口,这个流程在中显现。

  记着ISAPI是多线程的,以是哀求也会经由过程AppDomainFactory.Create()(译注:原文为ApplicationDomainFactory,疑有误)函数中前往的援用在多线程情况中被处置.列表1显现了ISAPIRuntime.ProcessRequest()办法中反编译后的代码,这个办法吸收一个ISAPIecb工具和服务范例(WorkerRequestType)作为参数.这个办法是线程平安的, 以是多个ISAPI线程能够同时在这一个被前往的工具实例上平安的挪用这个办法。

  列表1:ProcessRequest办法吸收一个ISAPIEcb并将其传给事情线程

publicintProcessRequest(IntPtrecb,intiWRType)
{
 HttpWorkerRequestrequest1=ISAPIWorkerRequest.CreateWorkerRequest(ecb, iWRType);
 stringtext1=request1.GetAppPathTranslated();
 stringtext2=HttpRuntime.AppDomainAppPathInternal;
 if(((text2==null)||text1.Equals("."))||
  (string.Compare(text1,text2,true,CultureInfo.InvariantCulture)==0))
 {
  HttpRuntime.ProcessRequest(request1);
  return0;
 }
 HttpRuntime.ShutdownAppDomain("Physicalapplicationpathchangedfrom"+text2+"to"+text1);
 return1;
}
  这里实践的代码其实不主要, 记着这是从外部框架代码中反编译出来的, 你不克不及间接处置它, 它也有大概在未来产生改动.它只是用来展现在幕后产生了甚么.ProcessRequest办法吸收非托管的ECB援用并将它传送给ISAPIWorkerRequest工具, 此工具卖力为以后哀求创立创立哀求高低文.在列表2中显现了这个历程.

  System.Web.Hosting.ISAPIWorkerRequest类是HttpWorkerRequest类的一个笼统子类(译注:HttpWorkerRequest和ISAPIWorkerRequest都是笼统类, 而且ISAPIWorkerRequest承继自HttpWorkerRequest),它的事情是构建一个作为Web使用输出的输出输入的笼统视角。注重这里有另外一个工场办法:CreateWorkerRequest, 经由过程判别承受到的第二个参数来创立对应的WorkerRequest工具.有三个分歧的版本:ISAPIWorkerRequestInProc,ISAPIWorkerRequestInProcForIIS6, ISAPIWorkerRequestOutOfProc.每次有哀求进进,这个工具被创立并作为哀求和呼应工具的基本,它会吸收它们的数据和由WorkerRequest供应的数据流.

  笼统的HttpWorkerRequest类在低层接口上供应一个高层的笼统,如许就封装了数据是从那里来的,能够是一个CGIWeb服务器,Web扫瞄器控件大概是一些你用来给HTTP运转时”喂”数据的自界说的机制.关头是ASP.NET能用一致的办法来吸收信息。

  在利用IIS的情形下, 这个笼统是创建在ISAPIECB块四周.在我们的哀求处置过程当中, ISAPIWorkerRequest挂起ISAPIECB并依据必要从它那边掏出信息.列表2显现了哀求字符串值(querystringvalue)是怎样被掏出来的.

  列表2:利用非托管数据的ISAPIWorkerRequest办法

//***ImplementedinISAPIWorkerRequest

publicoverridebyte[]GetQueryStringRawBytes()
{
 byte[]buffer1=newbyte;
 if(this._queryStringLength>0)
 {
  intnum1=this.GetQueryStringRawBytesCore(buffer1,this._queryStringLength);
  if(num1!=1)
  {
   thrownewHttpException("Cannot_get_query_string_bytes");
  }
 }
 returnbuffer1;
}
//***ImplementedinaspecificimplementationclassISAPIWorkerRequestInProcIIS6

internaloverrideintGetQueryStringCore(intencode,StringBuilderbuffer,intsize)
{
 if(this._ecb==IntPtr.Zero)
 {
  return0;
 }
 returnUnsafeNativeMethods.EcbGetQueryString(this._ecb,encode,buffer,size);
}
  ISAPIWorkerRequest完成了一个高条理的包装办法, 它挪用了低层的中心办法, 卖力真实的会见非托管APIs-或称为”服务级其余完成”(servicelevelimplementation).这些中心办法在特别的ISAPIWorkerRequest子类中为它投止的情况供应特别的完成, 这完成了复杂的扩大的(pluggable)情况, 如许一来当今后新的Web服务器接口或其他平台成了ASP.NET的方针时附加的完成类能够在被复杂的供应出来。这里另有一个帮忙类(helperclass)System.Web.UnsafeNativeMethods.内里很多对ISAPIECB布局的操纵完成了对ISAPI扩大的非托管操纵。刚刚打开这篇专题,猛然见到HAL9000发表的《对于大型公司项目平台选择j2ee的几层认识》系列,深受启发。

小魔女 发表于 2015-1-19 23:01:57

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

小妖女 发表于 2015-1-28 08:15:53

主流网站开发语言之PHP:PHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。

金色的骷髅 发表于 2015-2-5 14:24:27

关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。

只想知道 发表于 2015-2-12 06:11:44

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

仓酷云 发表于 2015-3-2 23:01:25

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

蒙在股里 发表于 2015-3-11 07:18:43

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

灵魂腐蚀 发表于 2015-3-17 23:09:12

业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

简单生活 发表于 2015-3-17 23:09:11

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

admin 发表于 2015-3-25 06:20:22

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
页: [1]
查看完整版本: ASP.NET网页设计ASP.NET底层架构探究之再谈.NET运转时