1. 程式人生 > >淺談ASP.NET框架

淺談ASP.NET框架

本篇文章更適合具有一定開發經驗,一定功底,且對底層程式碼有所研究的朋友!!!

本篇文章稍微偏原理且底層,有一定難度和且比較晦澀,文章粒度稍微粗些,更細粒度的,會在後續的文章中,結合具體的Demo例項分析。感興趣的朋友,可以先收藏。

一 .NET框架概述

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

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框架

 

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的互動;

(三)程式編譯過程

1.程式編譯過程大致可概述

2.在控制檯中操作

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProgramRunDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            double sum = AddSum(10.5, 9.5);
            Console.WriteLine("sum={0}", sum);
            Console.Read();
        }
        public static double AddSum(double a,double b)
        {
            return a + b;
        }
    }
}

下面我們將AddSum()方法編譯成dll檔案

通過反編譯工具.NET Reflector檢視IL程式碼

下面我們用NotePad++編譯原始碼,用VS的csc.exe編譯器編譯

提示:當在Dos命令中中提示:‘csc’不是內部或外部命令,也不是可執行的程式或批處理檔案。

請將.net csc.exe 路徑新增到系統環境變數中,我的csc.exe路徑為

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

 

列舉幾個比較常用的csc.exe命令

//編譯生成 File.exe 的 File.cs
csc File.cs 

//編譯生成 File.dll 的 File.cs
csc /target:library File.cs

//編譯 File.cs 並建立 My.exe
csc /out:My.exe File.cs

//編譯當前目錄中的所有 C# 檔案,對其進行優化並定義 DEBUG 符號。 輸出為 File2.exe
csc /define:DEBUG /optimize /out:File2.exe *.cs

//編譯當前目錄中的所有 C# 檔案,生成 File2.dll 的除錯版本。 不顯示徽標和警告
csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs

//將當前目錄中的所有 C# 檔案編譯為 Something.xyz (DLL)
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形成目的碼,這個過程比較快

大家想想:為什麼第一階段比較慢,第二階段比較快呢?將在下面的IL中講到。

(四)CLR

1.作用:記憶體管理,異常管理,多執行緒管理,GC管理等。CLR為.NET中極其重要的組成部分,也是.NET框架中比較難且晦澀技術之一。

2.可以把CLR看成是Java虛擬機器;

3.JIT即時編譯,主要由三部分構成(主編譯器,PreJit和EconoJit)

4.JIT+CLR實現一次編譯,多次執行且可跨平臺;

5.CLR中比較重要的一個環節,就是管道(Pipes)(HttpModule和HttpHandler)

 (五)MSIL

1.IL是.cs程式碼經過VS編譯器csc.exe編譯而成的;

2.IL比較接近機器程式碼但非機器程式碼(這個特點使其IL=》.exe過程比較快);

3.IL程式碼是指令無關的;

4.可以通過反彙編工具檢視IL程式碼;

二  基於.NET Framework框架的B/S程式執行解析

(一)總體流程概述

 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

 (三)TCP/IP模型

 

 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版)(謝希仁 著)