69

【APS.NET 框架系列】您所经历的,但未必研究的那些技术 - Alan_beijing

 6 years ago
source link: https://www.cnblogs.com/wangjiming/p/8201129.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

浅谈ASP.NET框架

1066923-20180110033829004-2140333139.png   本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!!

本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文章中,结合具体的Demo实例分析。感兴趣的朋友,可以先收藏。

一 .NET框架概述

1066923-20180110211304301-1160018928.png

1.作用:提供了基于.NET框架开发的基础平台和模板,为.NET开发的基架;

2.基本构成:可支持语言,CLS,模板框架,基本模板,基本操作,基本类库,公共需要运行时,CTS和CLS,OS等;

    (1)可支持语言:.NET框架可支持vb,c++,c#,F#,js等语言开发;

    (2)CLS:通用语言规范,使多种语言开发成为了可能,可参考:https://docs.microsoft.com/en-us/dotnet/standard/language-independence-and-language-independent-components

    (3)模板框架:B/S模式开发,C/S模式开发,App开发,接口开发

            B/S:WebForm和MVC,.NET Core;主要是PC运用程序;

            C/S:Winform和WPF,主要是桌面运用程序;

            APP:当前主流的一种开发模式;

    (4)基本操作:对DB操作(ADO.NET和EF),I/O操作等;

    (5)BCL:基本类库,供调用;

    (6)CLR:公共语言运行时,是IL形成EXE必不可少的环节,也是JIT实现一次编译,多次且跨平台运行的必不可少的环境,在.NET框架中扮演着及其重要的角色,且技术比较难且晦涩;

    (7)CTS 和 CLS:CTS,即通用类型系统,实现COM组件兼容等;

    (8)OS:屏蔽底层实现,高度抽象,OS类型:Win XP(基本淘汰,微软官方都不维护了)、Win 7 ,Win 8,Win 10;

3..NET两大产品:Dynamic CRM 和SharePoint;

 (一)ADO.NET

1066923-20180109233318863-356650063.png

1.作用:程序与数据交互的方式之一。.NET框架中,ADO.NET抽象化了程序与Database的交互,在进行基本的CRUD操作时,只需调用具体的类,方法即可;

2.基本构成:主要由五大对象构成。Conneciton对象,DataAdapter对象,Command对象,DataSet对象,DataReader对象构成;

3.五大对象的基本概述:

   (1)Connection对象:连接数据库的通道,主要方法为Open()和Close(),前者负责打开数据库入口,后者负责关闭数据库入口;

   (2)Command对象负责对DB的具体操作,CRUD就是通过它实现的;

   (3)DataAdapter对象负责将DB与DataSet适配,使基本的CRUD得以实现;

   (4)DataSet对象扮演虚拟内存的角色,也扮演缓存的角色,是实现Application与DB数据交互的必要环节之一;

   (5)DataReader主要解决读取数据的问题,性能比较高;

4.建议:具体详细信息,大家可以参照MSDN,其概述比较详细;

(二)EF框架

 

1066923-20180110011445238-1484651185.png

1.作用:为程序员提供更加方便快捷的数据操作,对于初级程序员来说,能很快的上手,极其方便(当然,有经验的EF开发人员可能经历过EF的各种坑);

2.三种模式:DB First,Code First,Model First;

3.基本构成:操作工具(Linq To Entity,Entity SQL),ObjectServices,Entity Client,EDM,ADO.NET  Data Provider;

   (1)Linq To  Entity 和Entity SQL:提供了对数据操作的两种不同方式;

   (2)ObjectServices:DB访问入口,实现实体与数据的转换;

   (3)Entity Client:负责将Linq To Entity和Entity SQL转化为标准的SQL;

   (4)EDM:实现概念模型向存储模型的转换;

    (5)ADO.NET Data Provider:实现对DB的交互;

(三)程序编译过程

1066923-20180110181734941-967506451.png

1.程序编译过程大致可概述

2.在控制台中操作

Code:

ContractedBlock.gifExpandedBlockStart.gif

View Code

1066923-20180110194116535-1441406626.png

下面我们将AddSum()方法编译成dll文件

1066923-20180110200405347-614251704.png

通过反编译工具.NET Reflector查看IL代码

1066923-20180111223613629-163970625.png

下面我们用NotePad++编译源代码,用VS的csc.exe编译器编译

1066923-20180110203709832-848966578.png

提示:当在Dos命令中中提示:‘csc’不是内部或外部命令,也不是可运行的程序或批处理文件。

请将.net csc.exe 路径添加到系统环境变量中,我的csc.exe路径为

C:\Windows\Microsoft.NET\Framework64\v4.0.30319

不会的,可以参照 csc.exe Path路径配置

或者参照我的另外一篇文章【java系列】java开发环境搭建

 

1066923-20180110204122863-1351847125.png

列举几个比较常用的csc.exe命令

 1 //编译生成 File.exe 的 File.cs
 2 csc File.cs 
 3 
 4 //编译生成 File.dll 的 File.cs
 5 csc /target:library File.cs
 6 
 7 //编译 File.cs 并创建 My.exe
 8 csc /out:My.exe File.cs
 9 
10 //编译当前目录中的所有 C# 文件,对其进行优化并定义 DEBUG 符号。 输出为 File2.exe
11 csc /define:DEBUG /optimize /out:File2.exe *.cs
12 
13 //编译当前目录中的所有 C# 文件,生成 File2.dll 的调试版本。 不显示徽标和警告
14 csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs
15 
16 //将当前目录中的所有 C# 文件编译为 Something.xyz (DLL)
17 csc /target:library /out:Something.xyz *.cs

关于csc.exe的命令,大家可以参照MSDN:

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/compiler-options/command-line-building-with-csc-exe

3.编译过程大致可分为两个阶段:

第一阶段:.cs代码=>IL代码,这个编译时间比较慢

第二阶段:IL+dll通过CRL形成目标代码,这个过程比较快

1066923-20180110205600207-427482029.png大家想想:为什么第一阶段比较慢,第二阶段比较快呢?将在下面的IL中讲到。

(四)CLR

1066923-20180110181416801-1033725850.png

1.作用:内存管理,异常管理,多线程管理,GC管理等。CLR为.NET中极其重要的组成部分,也是.NET框架中比较难且晦涩技术之一。

2.可以把CLR看成是Java虚拟机;

3.JIT即时编译,主要由三部分构成(主编译器,PreJit和EconoJit)

4.JIT+CLR实现一次编译,多次运行且可跨平台;

5.CLR中比较重要的一个环节,就是管道(Pipes)(HttpModule和HttpHandler)

 (五)MSIL

1066923-20180109215418207-1793616136.png

1.IL是.cs代码经过VS编译器csc.exe编译而成的;

2.IL比较接近机器代码但非机器代码(这个特点使其IL=》.exe过程比较快);

3.IL代码是指令无关的;

4.可以通过反汇编工具查看IL代码;

二  基于.NET Framework框架的B/S程序运行解析

(一)总体流程概述

1066923-20180110024658535-720818725.png

 1.IIS在处理请求时,将资源分为两大类型:静态资源和动态资源

     静态资源:IMG,JS,CSS,HTML等;

     动态文件:ASP,ASP.NET,.aspx,..ashx,asax等;

 2.IIS处理静态资源:

    当IIS收到来自浏览器的请求,识别为静态资源时,IIS直接处理,将处理结果以HTML形式返回给浏览器;

 3.IIS如何处理动态资源?

   当IIS收到来自浏览器的请求,识别为动态资源时,此时IIS不能处理,转交给ISAPI Extensions(ISAPI 扩展程序)扩展程序,该扩展程序根据请求资源扩展名,寻找响应的程序处理,如为.asp文件,则asp_isapi处理

,若为.aspx,则aspnet_isapi处理,

 4.IIS如何处理WebForm和MVC?

  当IIS收到来自浏览器的请求,识别为动态资源时,此时IIS不能处理,转交给ISAPI Extensions处理,此时ASP.NET MVC HTTP处理程序识别请求资源是否为MVC,若是,则交给MVC路由,按照处理MVC方式处理,否则

,按照WebForm流程处理;

5.CLR里面的管道(Pipes)是怎样的呢?

   管道的本质是HttpModule和HttpHandler(一般处理程序.ashx);

 (二)CLR和Pipe

1066923-20180110021131754-1794923343.png

 (三)TCP/IP模型

 

1066923-20180111223446879-1780140888.png

 1.这个结构为当前比较标准的TCP/IP五层模型,在五层模型成为通用规范前,有七层模型和四层模型两大种类;

 2.关于这五层,谢希仁编写的《计算机网络》讲得比较详细且透彻,感兴起的朋友可以去看看;

 3.为什么要提到TCP/IP呢?很简单,我们在浏览器输入:http://www.google.com.hk/,发生了过程中,TCP/IP就不可或缺;

 4.在这里不多讲,会在后续文章WebApi和HTTP协议中详细讲解;

三  参考文献

【01】http://www.wrox.com/

【02】http://msdn.microsoft.com/en-us/library/system.web.httpapplication(v=vs.80).aspx

【03】ASP.NET MVC5 高级编程(Jon Galloway,Brad Wilson,K.Scott Allen,David Matson 著 ,孙远帅 译)

【04】ASP.NET MVC5编程实战(第3版)(Dino Esposite 著,潘丽丞 译)

【05】ASP.NET MVC4 开发指南   (黄保翕 作)

【06】计算机网络 (第6版)(谢希仁 著)

有喜欢的朋友,可以看一下,不喜欢的的朋友,勿喷,谢谢!!

1066923-20180405110945712-1323607740.png
  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:[email protected]
  • 可以转载该博客,但必须著名博客来源。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK