ASP.NET Web編程原理 之
******************************************************************
說明:
《ASP.NET Web編程原理》包括一系列的文章,取自于《ASP.NET程序設計教程》的第8章,對于ASP.NET開發中的一些比較復雜的問題做了介紹,主要目的是向在ITCAST上選學了我講授《ASP.NET技術基礎》系列課程(http://www.itcast.net/portal/courses/unit/137)的學員提供一些更詳細的學習資料。也可供其他ASP.NET開發者參考。
本系列文章由于出自本人所著的教材 《ASP.NET程序設計教程》(高等教育出版社 預計2009年2月出版),因此,網友可以以學習和參考等目的轉貼和傳播,但不能用于商業目的,比如將其原封不動地用在其他同類技術書籍中。
金旭亮
2008年9月27日
*******************************************************************
Windows 操作系統中的 IIS 負責提供互聯網服務,一臺運行了 IIS 的計算機可以看成是一臺 Web 服務器。
Windows XP SP2 中 IIS 主版本號為 5 , Windows 2003 Server 為 6 , Vista 和 Windows Server 2008 為 7 。對于 Windows 2003 Server ,其默認支持的 ASP.NET 版本為 1.1 ,因此必須單獨安裝 .NET Framework 2.0 以上版 本[1] 。
目前, IIS 6 是使用最為廣泛的版本, IIS 5 已基本不在 Web 服務器上部署, IIS 6 與 IIS 5 相比在系統架構上有著較大的差異, IIS 7 與 IIS 6 相比,基本架構并沒有根本性的變化,但在許多方面有新的增強和改進。本書選擇 IIS 6/7 進行介紹,大部分內容也適合于 IIS 5 ,但 IIS 5 一些已過時的特性就不介紹了。
首先,我們來仔細分辨一下三個很容易混淆的基本概念。
8.1.1網站、Web應用程序和虛擬目錄
在 IIS 中可以創建網站、 Web 應用程序和虛擬目錄,以便與計算機網絡上的用戶共享信息。“網站”、“ Web 應用程序”和“虛擬目錄”這三個概念的關系如 圖 8 ? 1 所示。
<?xml:namespace prefix = o />
<?xml:namespace prefix = v /><shapetype id="_x0000_t75" coordsize="21600,21600" o:preferrelative="t" o:spt="75" filled="f" stroked="f" path=" m@4@5 l@4@11@9@11@9@5 xe"><stroke joinstyle="miter"><formulas><f eqn="if lineDrawn pixelLineWidth 0"><f eqn="sum @0 1 0"><f eqn="sum 0 0 @1"><f eqn="prod @2 1 2"><f eqn="prod @3 21600 pixelWidth"><f eqn="prod @3 21600 pixelHeight"><f eqn="sum @0 0 1"><f eqn="prod @6 1 2"><f eqn="prod @7 21600 pixelWidth"><f eqn="sum @8 21600 0"><f eqn="prod @7 21600 pixelHeight"><f eqn="sum @10 21600 0"></f><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"><lock v:ext="edit" aspectratio="t"></lock><shape id="_x0000_i1025" style="WIDTH: 272.25pt; HEIGHT: 109.5pt" type="#_x0000_t75" o:ole=""><imagedata src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.emz" o:title=""></imagedata></shape></path></f></f></f></f></f></f></f></f></f></f></f></formulas></stroke></shapetype>
圖 8 ? 1 網站,應用程序與虛擬目錄
簡而言之, 一個“網站( Web Site )”包含一個或多個“ Web 應用程序( Web Application )”,一個 Web 應用程序包含一個或多個“虛擬目錄( Virtual Directory )”,而虛擬目錄則映射到 Web 服務器或遠程計算機上的物理目錄。
圖 8 ? 2 所示為運行 IIS 7 的一個 Web 服務器。
<shape id="圖片_x0020_1" style="VISIBILITY: visible; WIDTH: 192pt; HEIGHT: 263.25pt" o:spid="_x0000_i1026" type="#_x0000_t75" coordsize="21600,21600"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image002.png"></imagedata></shape>
圖 8 ? 2 IIS 7 中的網站,應用程序與虛擬目錄
圖 8?2 中可以清楚地看到此 Web 服務器上有兩個“網站”: Default Web Site 和 NewWebSite ,其中 Default Web Site 網站中有三個“ Web 應用程序”: HappyBookShopService 、 HappyBookShopWebSite 和 OnlineAlbum 。而 HappyBookShopWebSite 應用程序下的每一個子文件夾都是一個“虛擬目錄”。最頂層的虛擬目錄稱為“根虛擬目錄”, 圖 8?2 中 Web 應用程序 HappyBookShopWebSite 的根虛擬目錄為“ /HappyBookShopWebSite ”。
下面逐個剖析這三個概念。
1 網站( Web Site )
網站是 Web 應用程序的容器,每個網站都有一個唯一的標識,這一標識由它的 IP 地址、端口和可選的主機頭 / 主機名 組合而成, Web 服務器根據收到的 HTTP 請求中的這些信息來確定是對哪一個網站的請求 。
在 IIS 7 中,將網站標識稱為“ 網站綁定 ”, 圖 8 ? 3 所示為 IIS 7 默認網站的“網站綁定”對話框。
<shape id="_x0000_i1027" style="WIDTH: 307.5pt; HEIGHT: 196.5pt" o:ole="" type="#_x0000_t75" coordsize="21600,21600"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image003.emz"></imagedata></shape>
圖 8 ? 3 IIS7.0 中的網站綁定
2 Web 應用程序( Web Application )
Web 應用程序是一種在應用程序池( Application Pool )[3] 中運行并通過 HTTP 協議向用戶提供信息服務(通常以 HTML 格式表達信息)的軟件程序。創建 Web 應用程序時, Web 應用程序的名稱將成為網站 URL 的一部分,用戶可以通過 Web 瀏覽器發出針對該 URL 的 HTTP 請求。
使用 Visual Studio 創建的“ ASP.NET 網站”,其實是一個“ Web 應用程序”,它并不等于 IIS 中的“網站”。
在 IIS 中,每個網站至少必須擁有一個 Web 應用程序(但不一定是 ASP.NET 應用程序,可以是其他類型的 Web 應用程序),它被稱為“ 根 Web 應用程序” 或“ 默認 Web 應用程序” ,除此之外,網站還可以包含一個或多個 ASP.NET (或其他種類) Web 應用程序。
在 Windows XP SP2 中,使用 Visual Studio 創建的 ASP.NET 網站發布到本機 IIS 之后都是作為本機默認網站(即“ localhost ”所代表的網站)所承載的 Web 應用程序而運行的。
Windows Server 和 Vista 可以為某個 ASP.NET 應用程序創建一個獨立的 IIS 網站,此網站只承載這個唯一的 ASP.NET 應用程序,并且運行在一個獨立的應用程序池中。許多商業網站都采用這種方法以獲取較高的性能,同時將此網站與 Web 服務器上承載的其他網站相互隔離,以增強 Web 服務器的安全性。
3 虛擬目錄( Virtual Directory)
虛擬目錄是在 IIS 中指定并映射到本地或遠程服務器上的物理目錄的目錄名稱。然后,此虛擬目錄名稱將成為 Web 應用程序 URL 的一部分,用戶可以通過 Web 瀏覽器向 IIS 請求訪問此 URL 所對應的物理目錄中的資源。
在 IIS 中,每個 Web 應用程序都必須擁有一個最頂層的虛擬目錄,它被稱為“ 根虛擬目錄 ”。
在 Visual Studio 中,可以在屬性窗口中直接設定 ASP.NET 網站的根“虛擬路徑”( 圖 8 ? 4 )。
<shape id="圖片_x0020_26" style="VISIBILITY: visible; WIDTH: 198pt; HEIGHT: 191.25pt" o:spid="_x0000_i1028" type="#_x0000_t75" coordsize="21600,21600"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image004.png"></imagedata></shape>
圖 8 ? 4 ASP.NET 網站的虛擬路徑
但要注意,這里設定的“虛擬路徑”是 Visual Studio 自帶的輕量級 Web 服務器“ ASP.NET Development Server ”的虛擬路徑,而非 IIS 中的虛擬路徑。如果使用 Visual Studio 完整版本(比如團隊開發版),則可以使用一個“發布網站”的功能。在使用此功能發布網站時可以直接指定 ASP.NET 應用程序在 IIS 中所對應的根虛擬目錄 圖 8 ? 5 )。
<shape id="_x0000_i1029" style="WIDTH: 297pt; HEIGHT: 249pt" o:ole="" type="#_x0000_t75" coordsize="21600,21600"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image005.emz"></imagedata></shape>
圖 8 ? 5 設定 IIS 中 ASP.NET 網站的根虛擬目錄
圖 8 ? 5 中將 ASP.NET 網站所對應的 IIS 根虛擬目錄設為 MyNewWebSite 。
一個 Web 應用程序可以擁有多個虛擬目錄,這些虛擬目錄都將成為 Web 應用程序根虛擬目錄的子目錄。
可以很方便地在 IIS 中創建一個虛擬目錄( 圖 8 ? 6 )。
<shape id="圖片_x0020_28" style="VISIBILITY: visible; WIDTH: 256.5pt; HEIGHT: 232.5pt" o:spid="_x0000_i1030" type="#_x0000_t75" coordsize="21600,21600"><imagedata o:title="" src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image006.png"></imagedata></shape>
圖 8 ? 6 在 IIS 7 中創建一個虛擬目錄
給 Web 應用添加完虛擬目錄之后,可以通過以下 URL 訪問虛擬目錄中的網頁
http:// 網站名稱 /Web 應用程序根虛擬目錄 / 新創建的子虛擬目錄 /Web 網頁名稱
在上面的例子中, Web 應用程序根虛擬目錄為“ /MyNewWebSite ”,新加的虛擬目錄為“ MyNewVirtualDir ”,它指向“ D:/MyDir ”目錄。現假設 D:/MyDir 目錄中有一個 ASP.NET 網頁(不妨設為 Sample.aspx ),則通過以下 URL 可以訪問此網頁:
http://localhost/MyNewWebSite/MyNewVirtualDir/Sample.aspx
[1] 建議在 Windows 2003 Server 上安裝最新版本的 .NET Framework 以支持一些新技術,比如 AJAX 和 Silverlight 。
[2] 更具體來說,是 Windows Server 的一個系統核心組件: HTTP.SYS 負責這一工作。后面在介紹 IIS 架構時還將介紹 HTTP.SYS 組件。[3] 后文將應用程序池作更詳細的介紹
[4]“虛擬目錄”有時又被稱為“虛擬路徑”,兩者代表同一概念。
[5]對于 Visual Web Developer 速成版,它沒有提供“發布網站”的功能,但可以在“復制網站”對話窗口找到相應的按鈕完成這一工作。或者更直接些,直接使用 IIS 管理器來完成這一工作。
[6]在 IIS 5/6 中使用“虛擬目錄創建向導”來創建虛擬目錄,其方法是在 IIS 的某個 Web 應用程序節點上右擊,從快捷菜單中選“新建”--> “虛擬目錄”命令。 IIS 7 的操作是類似的,但它直接在快捷菜單的第一級中就提供了“添加虛擬目錄”的命令。
(請看 第二部分 :http://blog.csdn.net/bitfan/archive/2008/09/28/2990606.aspx)
<meta content="Word.Document" name="ProgId"> <meta content="Microsoft Word 12" name="Generator"> <meta content="Microsoft Word 12" name="Originator"> <link href="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List"> <link href="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_editdata.mso" rel="Edit-Time-Data"> <link href="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_oledata.mso" rel="OLE-Object-Data"> <style> v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <link href="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData"> <link href="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping"> <style> <!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:宋體; mso-font-kerning:1.0pt;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:10.0pt; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; mso-ascii-font-family:"Times New Roman"; mso-fareast-font-family:宋體; mso-hansi-font-family:"Times New Roman"; mso-font-kerning:0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <shapetype id="_x0000_t75" coordsize="21600,21600" o:preferrelative="t" o:spt="75" filled="f" stroked="f" path=" m@4@5 l@4@11@9@11@9@5 xe"><stroke joinstyle="miter"><formulas><f eqn="if lineDrawn pixelLineWidth 0"><f eqn="sum @0 1 0"><f eqn="sum 0 0 @1"><f eqn="prod @2 1 2"><f eqn="prod @3 21600 pixelWidth"><f eqn="prod @3 21600 pixelHeight"><f eqn="sum @0 0 1"><f eqn="prod @6 1 2"><f eqn="prod @7 21600 pixelWidth"><f eqn="sum @8 21600 0"><f eqn="prod @7 21600 pixelHeight"><f eqn="sum @10 21600 0"></f><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"><lock v:ext="edit" aspectratio="t"></lock><shape id="_x0000_i1025" style="WIDTH: 272.25pt; HEIGHT: 109.5pt" type="#_x0000_t75" o:ole=""><imagedata src="file:///C:%5CUsers%5CJINXUL%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_image001.emz" o:title=""></imagedata></shape></path></f></f></f></f></f></f></f></f></f></f></f></formulas></stroke></shapetype>
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
