ASP.NET Web編程原理 之
******************************************************************
說明:
《ASP.NET Web編程原理》包括一系列的文章,取自于《ASP.NET程序設(shè)計(jì)教程》的第8章,對(duì)于ASP.NET開發(fā)中的一些比較復(fù)雜的問題做了介紹,主要目的是向在ITCAST上選學(xué)了我講授《ASP.NET技術(shù)基礎(chǔ)》系列課程(http://www.itcast.net/portal/courses/unit/137)的學(xué)員提供一些更詳細(xì)的學(xué)習(xí)資料。也可供其他ASP.NET開發(fā)者參考。
本系列文章由于出自本人所著的教材 《ASP.NET程序設(shè)計(jì)教程》(高等教育出版社 預(yù)計(jì)2009年2月出版),因此,網(wǎng)友可以以學(xué)習(xí)和參考等目的轉(zhuǎn)貼和傳播,但不能用于商業(yè)目的,比如將其原封不動(dòng)地用在其他同類技術(shù)書籍中。
金旭亮
2008年9月27日
*******************************************************************
Windows 操作系統(tǒng)中的 IIS 負(fù)責(zé)提供互聯(lián)網(wǎng)服務(wù),一臺(tái)運(yùn)行了 IIS 的計(jì)算機(jī)可以看成是一臺(tái) Web 服務(wù)器。
Windows XP SP2 中 IIS 主版本號(hào)為 5 , Windows 2003 Server 為 6 , Vista 和 Windows Server 2008 為 7 。對(duì)于 Windows 2003 Server ,其默認(rèn)支持的 ASP.NET 版本為 1.1 ,因此必須單獨(dú)安裝 .NET Framework 2.0 以上版 本[1] 。
目前, IIS 6 是使用最為廣泛的版本, IIS 5 已基本不在 Web 服務(wù)器上部署, IIS 6 與 IIS 5 相比在系統(tǒng)架構(gòu)上有著較大的差異, IIS 7 與 IIS 6 相比,基本架構(gòu)并沒有根本性的變化,但在許多方面有新的增強(qiáng)和改進(jìn)。本書選擇 IIS 6/7 進(jìn)行介紹,大部分內(nèi)容也適合于 IIS 5 ,但 IIS 5 一些已過時(shí)的特性就不介紹了。
首先,我們來仔細(xì)分辨一下三個(gè)很容易混淆的基本概念。
8.1.1網(wǎng)站、Web應(yīng)用程序和虛擬目錄
在 IIS 中可以創(chuàng)建網(wǎng)站、 Web 應(yīng)用程序和虛擬目錄,以便與計(jì)算機(jī)網(wǎng)絡(luò)上的用戶共享信息。“網(wǎng)站”、“ Web 應(yīng)用程序”和“虛擬目錄”這三個(gè)概念的關(guān)系如 圖 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 網(wǎng)站,應(yīng)用程序與虛擬目錄
簡(jiǎn)而言之, 一個(gè)“網(wǎng)站( Web Site )”包含一個(gè)或多個(gè)“ Web 應(yīng)用程序( Web Application )”,一個(gè) Web 應(yīng)用程序包含一個(gè)或多個(gè)“虛擬目錄( Virtual Directory )”,而虛擬目錄則映射到 Web 服務(wù)器或遠(yuǎn)程計(jì)算機(jī)上的物理目錄。
圖 8 ? 2 所示為運(yùn)行 IIS 7 的一個(gè) Web 服務(wù)器。
<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 中的網(wǎng)站,應(yīng)用程序與虛擬目錄
圖 8?2 中可以清楚地看到此 Web 服務(wù)器上有兩個(gè)“網(wǎng)站”: Default Web Site 和 NewWebSite ,其中 Default Web Site 網(wǎng)站中有三個(gè)“ Web 應(yīng)用程序”: HappyBookShopService 、 HappyBookShopWebSite 和 OnlineAlbum 。而 HappyBookShopWebSite 應(yīng)用程序下的每一個(gè)子文件夾都是一個(gè)“虛擬目錄”。最頂層的虛擬目錄稱為“根虛擬目錄”, 圖 8?2 中 Web 應(yīng)用程序 HappyBookShopWebSite 的根虛擬目錄為“ /HappyBookShopWebSite ”。
下面逐個(gè)剖析這三個(gè)概念。
1 網(wǎng)站( Web Site )
網(wǎng)站是 Web 應(yīng)用程序的容器,每個(gè)網(wǎng)站都有一個(gè)唯一的標(biāo)識(shí),這一標(biāo)識(shí)由它的 IP 地址、端口和可選的主機(jī)頭 / 主機(jī)名 組合而成, Web 服務(wù)器根據(jù)收到的 HTTP 請(qǐng)求中的這些信息來確定是對(duì)哪一個(gè)網(wǎng)站的請(qǐng)求 。
在 IIS 7 中,將網(wǎng)站標(biāo)識(shí)稱為“ 網(wǎng)站綁定 ”, 圖 8 ? 3 所示為 IIS 7 默認(rèn)網(wǎng)站的“網(wǎng)站綁定”對(duì)話框。
<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 中的網(wǎng)站綁定
2 Web 應(yīng)用程序( Web Application )
Web 應(yīng)用程序是一種在應(yīng)用程序池( Application Pool )[3] 中運(yùn)行并通過 HTTP 協(xié)議向用戶提供信息服務(wù)(通常以 HTML 格式表達(dá)信息)的軟件程序。創(chuàng)建 Web 應(yīng)用程序時(shí), Web 應(yīng)用程序的名稱將成為網(wǎng)站 URL 的一部分,用戶可以通過 Web 瀏覽器發(fā)出針對(duì)該 URL 的 HTTP 請(qǐng)求。
使用 Visual Studio 創(chuàng)建的“ ASP.NET 網(wǎng)站”,其實(shí)是一個(gè)“ Web 應(yīng)用程序”,它并不等于 IIS 中的“網(wǎng)站”。
在 IIS 中,每個(gè)網(wǎng)站至少必須擁有一個(gè) Web 應(yīng)用程序(但不一定是 ASP.NET 應(yīng)用程序,可以是其他類型的 Web 應(yīng)用程序),它被稱為“ 根 Web 應(yīng)用程序” 或“ 默認(rèn) Web 應(yīng)用程序” ,除此之外,網(wǎng)站還可以包含一個(gè)或多個(gè) ASP.NET (或其他種類) Web 應(yīng)用程序。
在 Windows XP SP2 中,使用 Visual Studio 創(chuàng)建的 ASP.NET 網(wǎng)站發(fā)布到本機(jī) IIS 之后都是作為本機(jī)默認(rèn)網(wǎng)站(即“ localhost ”所代表的網(wǎng)站)所承載的 Web 應(yīng)用程序而運(yùn)行的。
Windows Server 和 Vista 可以為某個(gè) ASP.NET 應(yīng)用程序創(chuàng)建一個(gè)獨(dú)立的 IIS 網(wǎng)站,此網(wǎng)站只承載這個(gè)唯一的 ASP.NET 應(yīng)用程序,并且運(yùn)行在一個(gè)獨(dú)立的應(yīng)用程序池中。許多商業(yè)網(wǎng)站都采用這種方法以獲取較高的性能,同時(shí)將此網(wǎng)站與 Web 服務(wù)器上承載的其他網(wǎng)站相互隔離,以增強(qiáng) Web 服務(wù)器的安全性。
3 虛擬目錄( Virtual Directory)
虛擬目錄是在 IIS 中指定并映射到本地或遠(yuǎn)程服務(wù)器上的物理目錄的目錄名稱。然后,此虛擬目錄名稱將成為 Web 應(yīng)用程序 URL 的一部分,用戶可以通過 Web 瀏覽器向 IIS 請(qǐng)求訪問此 URL 所對(duì)應(yīng)的物理目錄中的資源。
在 IIS 中,每個(gè) Web 應(yīng)用程序都必須擁有一個(gè)最頂層的虛擬目錄,它被稱為“ 根虛擬目錄 ”。
在 Visual Studio 中,可以在屬性窗口中直接設(shè)定 ASP.NET 網(wǎng)站的根“虛擬路徑”( 圖 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 網(wǎng)站的虛擬路徑
但要注意,這里設(shè)定的“虛擬路徑”是 Visual Studio 自帶的輕量級(jí) Web 服務(wù)器“ ASP.NET Development Server ”的虛擬路徑,而非 IIS 中的虛擬路徑。如果使用 Visual Studio 完整版本(比如團(tuán)隊(duì)開發(fā)版),則可以使用一個(gè)“發(fā)布網(wǎng)站”的功能。在使用此功能發(fā)布網(wǎng)站時(shí)可以直接指定 ASP.NET 應(yīng)用程序在 IIS 中所對(duì)應(yīng)的根虛擬目錄 圖 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 設(shè)定 IIS 中 ASP.NET 網(wǎng)站的根虛擬目錄
圖 8 ? 5 中將 ASP.NET 網(wǎng)站所對(duì)應(yīng)的 IIS 根虛擬目錄設(shè)為 MyNewWebSite 。
一個(gè) Web 應(yīng)用程序可以擁有多個(gè)虛擬目錄,這些虛擬目錄都將成為 Web 應(yīng)用程序根虛擬目錄的子目錄。
可以很方便地在 IIS 中創(chuàng)建一個(gè)虛擬目錄( 圖 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 中創(chuàng)建一個(gè)虛擬目錄
給 Web 應(yīng)用添加完虛擬目錄之后,可以通過以下 URL 訪問虛擬目錄中的網(wǎng)頁(yè)
http:// 網(wǎng)站名稱 /Web 應(yīng)用程序根虛擬目錄 / 新創(chuàng)建的子虛擬目錄 /Web 網(wǎng)頁(yè)名稱
在上面的例子中, Web 應(yīng)用程序根虛擬目錄為“ /MyNewWebSite ”,新加的虛擬目錄為“ MyNewVirtualDir ”,它指向“ D:/MyDir ”目錄。現(xiàn)假設(shè) D:/MyDir 目錄中有一個(gè) ASP.NET 網(wǎng)頁(yè)(不妨設(shè)為 Sample.aspx ),則通過以下 URL 可以訪問此網(wǎng)頁(yè):
http://localhost/MyNewWebSite/MyNewVirtualDir/Sample.aspx
[1] 建議在 Windows 2003 Server 上安裝最新版本的 .NET Framework 以支持一些新技術(shù),比如 AJAX 和 Silverlight 。
[2] 更具體來說,是 Windows Server 的一個(gè)系統(tǒng)核心組件: HTTP.SYS 負(fù)責(zé)這一工作。后面在介紹 IIS 架構(gòu)時(shí)還將介紹 HTTP.SYS 組件。[3] 后文將應(yīng)用程序池作更詳細(xì)的介紹
[4]“虛擬目錄”有時(shí)又被稱為“虛擬路徑”,兩者代表同一概念。
[5]對(duì)于 Visual Web Developer 速成版,它沒有提供“發(fā)布網(wǎng)站”的功能,但可以在“復(fù)制網(wǎng)站”對(duì)話窗口找到相應(yīng)的按鈕完成這一工作。或者更直接些,直接使用 IIS 管理器來完成這一工作。
[6]在 IIS 5/6 中使用“虛擬目錄創(chuàng)建向?qū)А眮韯?chuàng)建虛擬目錄,其方法是在 IIS 的某個(gè) Web 應(yīng)用程序節(jié)點(diǎn)上右擊,從快捷菜單中選“新建”--> “虛擬目錄”命令。 IIS 7 的操作是類似的,但它直接在快捷菜單的第一級(jí)中就提供了“添加虛擬目錄”的命令。
(請(qǐng)看 第二部分 :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>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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