在我的第一篇博客中,我發(fā)布過(guò)一個(gè)示例項(xiàng)目, 主要演示了我的我的AJAX框架和我的通用數(shù)據(jù)訪問(wèn)層。 雖然在當(dāng)初我認(rèn)為我已考慮地比較周全了,而且還提供了足夠的說(shuō)明文檔, 但在發(fā)布后的將近一年的時(shí)間里,還是有不少人給我發(fā)郵件,問(wèn)我一些關(guān)于不能運(yùn)行示例的問(wèn)題。 在所有問(wèn)題中,主要集中在IIS和SQL SERVER的配置方面。 因此,我認(rèn)為還是有必要再來(lái)談一下在IIS6/7以及SQL SERVER中部署ASP.NET網(wǎng)站的過(guò)程了。
在上篇博客【寫自己的ASP.NET MVC框架(下)】中, 我又發(fā)布了一個(gè)示例項(xiàng)目,它也包含一個(gè)網(wǎng)站項(xiàng)目,今天的介紹過(guò)程將主要以這個(gè)示例為主。 對(duì)于以前的示例所需配置的相同部分將不會(huì)重復(fù)介紹,不同點(diǎn)則會(huì)額外補(bǔ)充。
查看web.config文件
ASP.NET網(wǎng)站與一般的桌面程序不同,不是拷貝過(guò)來(lái)就能運(yùn)行的(數(shù)據(jù)庫(kù)連接除外)。
要想運(yùn)行它,通常需要一些配置過(guò)程。
但是,我們到底需要配置什么呢?
答案是:查看web.config
web.config通常會(huì)放在網(wǎng)站的根目錄,這個(gè)文件中包含了一最重要的網(wǎng)站運(yùn)行參數(shù)。比如: connectionStrings,httpHandlers,httpModules ,這些參數(shù)都是網(wǎng)站開(kāi)發(fā)人員認(rèn)為運(yùn)行網(wǎng)站所必需的參數(shù)。 因此,如果我們想將一個(gè)網(wǎng)站部署到IIS中,必須首先打開(kāi)web.config文件,逐個(gè)確認(rèn)這些重要的參數(shù)是否符合要求。
這里要補(bǔ)充一點(diǎn)的是:有些開(kāi)發(fā)人員喜歡將各類參數(shù)放在appSettings配置節(jié)中,即便是數(shù)據(jù)庫(kù)的連接字符串也放在appSettings中。 我只能說(shuō):這是個(gè)很不好的習(xí)慣。因此,在部署這類網(wǎng)站時(shí),可能還要注意一下appSettings是否包含數(shù)據(jù)庫(kù)的連接字符串, 這就需要人工識(shí)別了。當(dāng)然了,appSettings中還可能包含一些重要目錄配置,同樣,也只能人工識(shí)別了。
今天要講述的參數(shù)主要涉及到IIS和SQL SERVER,因此本文將會(huì)分開(kāi)介紹它們。
而且IIS還會(huì)分為6和7.5二個(gè)版本來(lái)單獨(dú)演示。
SQL SERVER則以 2005 Express版本來(lái)演示。
我演示所用的操作系統(tǒng)為:Windows Server 2003和Windows 7 ,它們分別附帶了IIS 6和IIS 7.5
說(shuō)明:通常我們?cè)诓渴鹁W(wǎng)站時(shí),都應(yīng)該先根據(jù)web.config定義的那些重要參數(shù)來(lái)配置網(wǎng)站。 但為了讓您能對(duì)這些參數(shù)有較深刻的印象,下面的演示中,不是先根據(jù)web.config來(lái)配置網(wǎng)站, 而是采用【從創(chuàng)建一個(gè)站點(diǎn)后,一步一步地發(fā)現(xiàn)問(wèn)題并解決】的方式來(lái)講解這個(gè)過(guò)程。
在IIS中創(chuàng)建網(wǎng)站
每個(gè)ASP.NET程序都是一個(gè)網(wǎng)站,要想運(yùn)行它們,都需要在IIS中部署它們, 部署的第一步就是要在IIS創(chuàng)建一個(gè)網(wǎng)站。 在IIS中創(chuàng)建網(wǎng)站的過(guò)程比較簡(jiǎn)單,因?yàn)镮IS都提供向?qū)Ы缑鎭?lái)幫助我們完成這個(gè)配置過(guò)程, 因此,本文打算省略那些無(wú)意義的貼圖。
說(shuō)明,我們先從IIS6開(kāi)始。
這里只要求您在IIS中創(chuàng)建一個(gè)網(wǎng)站,把它配置成網(wǎng)站就可以了,其它的配置我們后面再談。
示例項(xiàng)目:點(diǎn)擊此處進(jìn)入 MyMVC DEMO 下載頁(yè)面
網(wǎng)站創(chuàng)建好了嗎?我停下來(lái)等一下吧。
我的網(wǎng)站配置好了,現(xiàn)在已經(jīng)可以用瀏覽器訪問(wèn)它。

現(xiàn)在我們可以切換風(fēng)格來(lái)試試效果,點(diǎn)擊頁(yè)面右上角的【3】試試看。
噢,怎么一開(kāi)始就出錯(cuò)了:

看到這個(gè)提示,不要茫然。為了界面友好,我用JavaScript捕獲了這個(gè)錯(cuò)誤,但現(xiàn)在我們需要知道錯(cuò)誤的原因是什么,怎么辦呢?
有FireBug或者Fiddler2嗎?
如果有,就打開(kāi)它們吧。下圖是我用FireBug看到的錯(cuò)誤原因(需要重新執(zhí)行剛才的操作):

從FireBug中,我們可以看到,剛才的操作觸發(fā)了一次請(qǐng)求,請(qǐng)求的地址是:/AjaxStyle/SetStyle.cspx
cspx是個(gè)什么擴(kuò)展名呢?還是打開(kāi)web.config看一下吧。
<httpHandlers> <add path="*.cspx" verb="*" type="MyMVC.AjaxHandlerFactory, MyMVC" validate="true" /> <add path="*.aspx" verb="*" type="MyMVC.MvcPageHandlerFactory, MyMVC" validate="true" /> <add path="/mvc/*" verb="*" type="MyMVC.MvcPageHandlerFactory, MyMVC" validate="true" /> </httpHandlers>
在web.config中,網(wǎng)站要求配置的一些httpHandlers中,第一個(gè)便是針對(duì)【cspx】擴(kuò)展名的。
這里我要解釋一下【cspx】這個(gè)擴(kuò)展名了。在以前的示例中,我選擇了【cs】這個(gè)擴(kuò)展名表示一個(gè)AJAX調(diào)用, 但是,后來(lái)發(fā)現(xiàn)很多人在IIS中部署中遇到問(wèn)題了(原因后面再說(shuō))。于是,這次我換了個(gè)擴(kuò)展名。 然而,又有人問(wèn)我:cspx, 是不是寫錯(cuò)了? 或許他認(rèn)為應(yīng)該是【aspx】才對(duì)。
這個(gè)問(wèn)題我用郵件回答過(guò)多次了,今天用博客的形式再回答一次:
取什么擴(kuò)展名都不重要,我只要選擇沒(méi)有用過(guò)的擴(kuò)展名來(lái)區(qū)分是AJAX調(diào)用就可以了。
我也可以取【fish】來(lái)做為AJAX請(qǐng)求地址的擴(kuò)展名,只是擔(dān)心一些人認(rèn)為俗氣而已。
IIS6 添加擴(kuò)展名映射
回到IIS,在網(wǎng)站節(jié)點(diǎn)上,右擊,從彈出的菜單中,選擇【屬性】,然后在彈出的對(duì)話框中,選擇【主目錄】選項(xiàng)卡,并點(diǎn)擊【配置】按鈕。 此時(shí)的界面應(yīng)該是這樣的:

找到【ascx】這個(gè)擴(kuò)展名,雙擊它,是不是彈出下面這個(gè)對(duì)話框?

照著圖片的操作去完成:復(fù)制【可執(zhí)行文件】的設(shè)置路徑。然后點(diǎn)擊【取消】關(guān)閉對(duì)話框。
此時(shí)將回到【應(yīng)用程序配置】對(duì)話框,點(diǎn)擊【添加...】按鈕,

照著圖片操作吧。對(duì)話框中的【可執(zhí)行文件】的參數(shù),此時(shí)已在Windows剪切板中,現(xiàn)在只要粘貼就可以了。
全部【確定】,關(guān)閉所有對(duì)話框,再回到瀏覽器,然后再試一次。
現(xiàn)在可以操作了吧?
先不要點(diǎn)擊其它鏈接,還是來(lái)對(duì)剛才的操作做個(gè)小結(jié)吧。
在ASP.NET中,有時(shí)候我們可能會(huì)需要?jiǎng)?chuàng)建自己所需的HttpHandler來(lái)處理一些特殊的請(qǐng)求。
我的MyMVC框架就有這個(gè)需求:將AJAX請(qǐng)求與頁(yè)面的請(qǐng)求分開(kāi)來(lái)處理。
所以我們需要一些特殊格式的URL。通常選擇一個(gè)沒(méi)用過(guò)的擴(kuò)展名會(huì)比較方便,因此我選擇了 cspx
為了能告訴ASP.NET將以下格式的ULR映射到AjaxHandlerFactory
/Fish.AA.AjaxTest/Add.cspx
/Fish.BB.AjaxTest.Add.cspx
/Fish/BB/AjaxTest/Add.cspx
/AjaxDemo/GetMd5.cspx
/AjaxDemo.GetMd5.cspx
我就需要在web.config中注冊(cè)這種URL模式,并且為了能最好的匹配這些URL,我可以使用下面的配置:
<httpHandlers> <add path="*Ajax*/*.cspx,*Ajax*.*.cspx" verb="*" type="MyMVC.AjaxHandlerFactory, MyMVC" validate="true"/> </httpHandlers>
我們可以用Visual Studio自帶的WebDev.WebServer.EXE來(lái)運(yùn)行網(wǎng)站程序。
本來(lái),這一切都是很完美的。
可是,IIS中并不支持這么復(fù)雜的path設(shè)置,它只能支持簡(jiǎn)單的擴(kuò)展名映射。
所以,我也只好使用簡(jiǎn)單的擴(kuò)展名:【.cspx】來(lái)向IIS注冊(cè)。
我再來(lái)解釋一下,為什么在ASP.NET中,前面那個(gè)path能夠識(shí)別我上面所說(shuō)的5種格式的URL?
在ASP.NET管線的處理器映射階段,ASP.NET會(huì)將【*Ajax*/*.cspx,*Ajax*.*.cspx】轉(zhuǎn)換成下面的正則表達(dá)式,
再來(lái)檢查每個(gè)請(qǐng)求的URL是否匹配。
(?:\A|(?<=/))[^/]*Ajax[^/]*/[^/]*\.cspx\z|(?:\A|(?<=/))[^/]*Ajax[^/]*\.[^/]*\.cspx\z
有興趣的話,您也可以檢驗(yàn)一下,這個(gè)正則表達(dá)式與前面的URL都能匹配。
從這里也可以看出ASP.NET對(duì)處理器的映射實(shí)現(xiàn),是可以支持比較復(fù)雜的URL模式的。
關(guān)于處理器的映射過(guò)程可以參考我的博客【細(xì)說(shuō) HttpHandler 的映射過(guò)程】
前面解釋了我為什么最終選擇【.cspx】來(lái)向IIS注冊(cè)處理器了。
在注冊(cè)時(shí),還有二個(gè)參數(shù)也比較重要:
1. 可執(zhí)行文件:其實(shí)就是一個(gè)實(shí)現(xiàn)了ISAPI的模塊,IIS會(huì)將匹配的請(qǐng)求交給它,然后由它再交給ASP.NET。
這個(gè)參數(shù)的路徑比較長(zhǎng),我們根本不需要記住它,只需要找個(gè)已有配置中,將它COPY出來(lái)就可以了。
2. 確認(rèn)文件是否存在:這個(gè)參數(shù)一定不要選擇。因?yàn)槲覀冋?qǐng)求的URL并沒(méi)有對(duì)應(yīng)的文件存在。
這里要補(bǔ)充一點(diǎn):
我以前發(fā)布的FishWebLib DEMO中,
使用了【cc】這樣的擴(kuò)展名,可以按照上面的方法注冊(cè)。
但我還使用了【cs】和【ascx】這二個(gè)擴(kuò)展名。由于這二個(gè)擴(kuò)展名的注冊(cè)已經(jīng)存在了,
所以,我需要修改它們的配置:雙擊配置項(xiàng),確保不要勾選【確認(rèn)文件是否存在】即可。

IIS6 無(wú)擴(kuò)展名的映射
讓我們?cè)倩氐角懊嬉雅渲煤玫氖纠校藭r(shí)頁(yè)面的顯示應(yīng)該是這個(gè)樣子的:

點(diǎn)擊一下頁(yè)面上的鏈接【/mvc/Customers】試試。

不要以為我是在故意設(shè)置陷阱哦。我在設(shè)計(jì)示例程序時(shí),根本也沒(méi)想到會(huì)這樣。
到這里,可能有人會(huì)想,在httpHandlers中不是還有個(gè)【path="/mvc/*"】沒(méi)有配置嗎?
繼續(xù)按照前面的方法去配置就能解決問(wèn)題了。

好吧,我再照著前面的方法再試著注冊(cè)【path="/mvc/*"】試試,結(jié)果如下:

因此,前面的方法對(duì)于這類【無(wú)擴(kuò)展名】的URL來(lái)說(shuō),是無(wú)效的。
對(duì)于這類無(wú)擴(kuò)展名的URL,在IIS6中可以使用添加【通配符應(yīng)用程序映射】的方法來(lái)解決。
回到【應(yīng)用程序配置】對(duì)話框,點(diǎn)擊【插入...】按鈕,彈出下面的對(duì)話框:

按照?qǐng)D片來(lái)設(shè)置一下吧。然后,【確定】關(guān)閉對(duì)話框。此時(shí)的設(shè)置應(yīng)該是這樣的:

全部點(diǎn)擊【確定】關(guān)閉所有對(duì)話框。
讓我們?cè)俅位氐绞纠绦颍藭r(shí)可以發(fā)現(xiàn),什么問(wèn)題都沒(méi)有了。
再補(bǔ)充一句:如果使用這種方法,前面注冊(cè)cspx的過(guò)程就不需要了。因?yàn)榇藭r(shí)所有的請(qǐng)求都會(huì)交給ASP.NET,而ASP.NET會(huì)識(shí)別我在web.config中所做的配置。
目錄的寫入權(quán)限
為了方便MyMVC DEMO的部署過(guò)程, 這次我選擇了XML文件做為數(shù)據(jù)源。寫入XML的時(shí)機(jī)是在ASP.NET被停止運(yùn)行的時(shí)候(Application_End事件中)。
讓一個(gè)在IIS中運(yùn)行的網(wǎng)站停止運(yùn)行的方法就是停止網(wǎng)站所使用的【應(yīng)用程序池】。
可以在網(wǎng)站屬性對(duì)話框中找到網(wǎng)站所使用的【應(yīng)用程序池】:

再切到IIS的【應(yīng)用程序池】的列表,找到前面那個(gè)【應(yīng)用程序池】,右擊鼠標(biāo),
從彈出的菜單中點(diǎn)擊【屬性】菜單,然后在出現(xiàn)的對(duì)話框中選擇【標(biāo)識(shí)】選項(xiàng)卡:

從這個(gè)圖片中,我們可以知道網(wǎng)站以哪個(gè)Windows帳號(hào)在運(yùn)行。記住這里,后面會(huì)用到。
好吧,點(diǎn)擊【取消】關(guān)閉對(duì)話框。
補(bǔ)充一點(diǎn):要想知道網(wǎng)站以什么帳號(hào)運(yùn)行,還可以查看【W(wǎng)indows任務(wù)管理器】, 找到w3wp.exe所在進(jìn)程即可:

回到示例程序中,我們可以隨便添加一些數(shù)據(jù)。
然后,在【應(yīng)用程序池】列表中,停止網(wǎng)站所使用的應(yīng)用程序池。再啟動(dòng)它。
重新刷新示例程序的頁(yè)面。
發(fā)現(xiàn)什么了?是不是數(shù)據(jù)沒(méi)有保存下來(lái)?
如果發(fā)現(xiàn)數(shù)據(jù)沒(méi)有保存起來(lái),可以繼續(xù)閱讀。
數(shù)據(jù)不能保存的原因并不是因?yàn)榇a沒(méi)有執(zhí)行,而是因?yàn)椋?b>網(wǎng)站運(yùn)行的帳號(hào)沒(méi)有權(quán)限寫數(shù)據(jù)文件。
XML是放在網(wǎng)站的App_Data目錄中,為了檢查網(wǎng)站是否有寫入權(quán)限,可以在App_Data目錄上右擊,
然后選擇【屬性】菜單,切換到【安全】選項(xiàng)卡:

經(jīng)過(guò)前面的分析,我們已經(jīng)知道網(wǎng)站是以【NETWORK SERVICE】帳號(hào)運(yùn)行, 然而,在這個(gè)目錄的安全設(shè)置中,并沒(méi)有允許【NETWORK SERVICE】帳號(hào)能有寫入權(quán)限, 所以,網(wǎng)站在停止運(yùn)行時(shí),是由于沒(méi)有權(quán)限才導(dǎo)致不能保存數(shù)據(jù)的。
此時(shí),我們可以賦予【NETWORK SERVICE】帳號(hào)對(duì)App_Data目錄有寫入權(quán)限。 設(shè)置如下圖:

好了,您可以再去重啟網(wǎng)站所在的【應(yīng)用程序池】,會(huì)發(fā)現(xiàn)現(xiàn)在數(shù)據(jù)能正常保存了。
SQL SERVER的配置
在FishWebLib DEMO中, 我為了演示我的通用數(shù)據(jù)訪問(wèn)層而引入了SQL SERVER, 因此,示例程序需要SQL SERVER的支持。
首先,還是回到web.config,來(lái)看一下示例程序需要訪問(wèn)什么樣的數(shù)據(jù)庫(kù):

注意:示例程序需要連接的SQL SERVER服務(wù)器是:localhost\sqlexpress
我的機(jī)器上安裝了三個(gè)SQL SERVER的實(shí)例:

因此,我需要以【命名實(shí)例】的方式來(lái)訪問(wèn)。
如果您的機(jī)器將SQL SERVER做為【默認(rèn)實(shí)例】來(lái)安裝,則需要修改為:localhost
在示例的壓縮包中,我提供了SQL SERVER所需的數(shù)據(jù)文件:db\MyNorthwind.mdf
在運(yùn)行示例前,我需要將它【附加】到SQL SERVER中。
現(xiàn)在需要先啟動(dòng) SQL Server Management Studio ,連接SQL SERVER的實(shí)例后,
在【對(duì)象資源管理器】的樹(shù)型控件中,找到【數(shù)據(jù)庫(kù)】節(jié)點(diǎn),右擊,然后點(diǎn)擊【附加...】菜單,
在出現(xiàn)的對(duì)話框中,點(diǎn)擊【添加...】按鈕,選擇MyNorthwind.mdf文件,然后點(diǎn)擊【確定】按鈕。
我這邊出錯(cuò)了。

再仔細(xì)地看一下,發(fā)現(xiàn)是日志文件沒(méi)有找到造成的。
是的,我并沒(méi)將日志文件也放在壓縮包中。
好吧,在對(duì)話框中刪除日志文件就可以了,再次【確定】。
還是出錯(cuò):

注意了:這次的錯(cuò)誤與前面的錯(cuò)誤并不一樣。 這次是說(shuō)沒(méi)有目錄的寫入權(quán)限。
當(dāng)遇到?jīng)]有目錄的訪問(wèn)權(quán)限時(shí),我們首先要知道程序是以什么帳號(hào)在運(yùn)行。
這是非常重要的。要不然,如何配置目錄的訪問(wèn)權(quán)限呢?
判斷程序以什么帳號(hào)運(yùn)行最簡(jiǎn)單方法就是:打開(kāi)【W(wǎng)indows任務(wù)管理器】,然后去找進(jìn)程。
這個(gè)方法可參考前面的過(guò)程。最終我們可以發(fā)現(xiàn)sqlserver.exe是以【NETWORK SERVICE】帳號(hào)在運(yùn)行(我的機(jī)器是這樣)。
好吧,再按照前面設(shè)置App_Data目錄權(quán)限的方法再設(shè)置MyNorthwind.mdf文件所在目錄的訪問(wèn)權(quán)限。
再次嘗試【附加】數(shù)據(jù)庫(kù),將能成功完成。
在我機(jī)器上,現(xiàn)在已經(jīng)可以運(yùn)行示例程序了。
說(shuō)明:如果由于種種原因,不使用【Integrated Security=SSPI】的連接認(rèn)證方式,還可以使用【用戶名/密碼】的方式, 那就需要修改web.config中的連接字符串了。
小結(jié):
1. 由于SQL SERVER的數(shù)據(jù)文件保存在Windows操作系統(tǒng)中,因此必須授予運(yùn)行SQL SERVER進(jìn)程的帳號(hào)所必需的目錄訪問(wèn)權(quán)限。
2. 連接到SQL SERVER時(shí),也可能會(huì)因?yàn)镾QL SERVER驗(yàn)證連接身份而失敗,那么也必須配置需要的訪問(wèn)權(quán)限。
到此為止,示例所需的IIS配置以及SQL SERVER的配置都介紹完了。
在IIS7中部署ASP.NET程序
前面介紹了如何在IIS6中部署一個(gè)ASP.NET網(wǎng)站,現(xiàn)來(lái)看一下在IIS7.5中如何完成這個(gè)過(guò)程。
接下來(lái)的演示將以Windows 7的IIS7.5為準(zhǔn)。
IIS7.5相對(duì)于IIS6的改進(jìn),給我的感覺(jué)是:部署ASP.NET網(wǎng)站簡(jiǎn)直太容易了。
IIS7為了兼容老版本,它支持二種模式來(lái)運(yùn)行ASP.NET程序:集成模式,經(jīng)典模式。
所謂的經(jīng)典模式,其實(shí)就是為了兼容IIS6的模式。下文將著重介紹集成模式,這樣才能體現(xiàn)IIS改進(jìn)的優(yōu)勢(shì)。
在IIS6中,我們需要配置擴(kuò)展名的映射或者通配符映射,將請(qǐng)求交給一個(gè)ISAPI篩選器,然后由它再交給ASP.NET, 最終由ASP.NET再將請(qǐng)求交給我們的httpHandlers, httpModules。 我們?cè)趙eb.config中配置的httpHandlers, httpModules,對(duì)于IIS6來(lái)說(shuō)是不可見(jiàn)的,所以,只能再次到IIS中配置。
從IIS7開(kāi)始,IIS支持以一種稱為【集成模式】的方式運(yùn)行ASP.NET程序,此時(shí),IIS能直接將請(qǐng)求交給ASP.NET的httpHandlers和httpModules, 而且還可以直接從web.config中直接讀取配置,因此,只要我們把web.config準(zhǔn)備好,配置任務(wù)就非常簡(jiǎn)單了。
由于這個(gè)緣故,我在后來(lái)提供的示例中,在web.config中已增加對(duì)IIS7的支持。
以下就是二個(gè)示例項(xiàng)目所需的IIS7的配置部分。
FishWebLib DEMO只需要下面的配置就可以了:

MyMVC DEMO所需的配置如下:

以上這些配置會(huì)反映在IIS7.5的哪些地方看到呢?
請(qǐng)看下圖:

在這個(gè)【處理器映射】列表中,前三個(gè)不正是我在web.config中的配置嘛。
前面還有一塊fileExtensions的配置又是做什么的呢?
請(qǐng)看下圖:

對(duì)于FishWebLib DEMO來(lái)說(shuō),它使用了 cs, ascx 這樣的擴(kuò)展名, 而且這二個(gè)擴(kuò)展名按照默認(rèn)的配置是禁止訪問(wèn)的,所以在那個(gè)示例中,這段配置的用途是將這二個(gè)擴(kuò)展名變成允許訪問(wèn)。
我在使用Windows7的IIS7.5時(shí),還發(fā)現(xiàn)一個(gè)與IIS6不同的地方,它會(huì)默認(rèn)為每個(gè)網(wǎng)站創(chuàng)建一個(gè)獨(dú)立的應(yīng)用程序池,而且運(yùn)行帳號(hào)也不是NETWORK SERVICE, 不過(guò),我們可以容易地在【應(yīng)用程序池】的屬性中去修改它。

小結(jié):
在IIS7.5中部署ASP.NET網(wǎng)站是件容易的事,前提是:事先準(zhǔn)備好web.config中的system.webServer配置節(jié)。
然后只需要?jiǎng)?chuàng)建在IIS中創(chuàng)建一個(gè)網(wǎng)站,并指向程序目錄即可。
注意:如果程序需要訪問(wèn)本地文件或者數(shù)據(jù)庫(kù),那么還需要設(shè)置文件系統(tǒng)或者數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限,具體可參考前面相關(guān)小節(jié)。
80端口和域名
在前面的演示中,為了簡(jiǎn)單,選擇了25678這個(gè)端口,那是因?yàn)?0端口已被使用。 這樣做實(shí)際上不影響網(wǎng)站的運(yùn)行,不過(guò),URL看起來(lái)就不美觀了。 通常HTTP默認(rèn)是使用80端口,如果使用這個(gè)端口,那么URL中就不會(huì)出現(xiàn)端口號(hào)了。 為了讓URL地址看起來(lái)更美觀,按下來(lái)我將演示如何使用80端口。
在IIS中,為了能讓一個(gè)網(wǎng)站程序運(yùn)行在80號(hào)端口中,有2個(gè)辦法:
1. 為網(wǎng)站程序使用其它的IP地址的80端口。
2. 為網(wǎng)站指定域名綁定。
我們可以在網(wǎng)卡的配置中新增一個(gè)IP地址(如果已經(jīng)有多個(gè)IP就不用這樣做了):

然后在IIS中,為網(wǎng)站設(shè)置【綁定】,使用這個(gè)IP地址了。請(qǐng)參考下圖:

除了使用新IP地址的方式外,我們還可以使用域名的方式讓網(wǎng)站可以在80端口下面運(yùn)行。
方法還是在IIS中設(shè)置網(wǎng)站的【綁定】操作,給網(wǎng)站指定一個(gè)域名即可:

最終的設(shè)置應(yīng)該是下面這個(gè)樣子的:

此時(shí)我們就可以使用下面二種方式來(lái)訪問(wèn)我的示例網(wǎng)站了:
http://192.168.0.222
http://www.mymvc-demo.com
不過(guò)這里又有個(gè)新問(wèn)題:域名從哪里來(lái)?
答案有二個(gè)(對(duì)于演示來(lái)說(shuō)):
1. 修改 C:\Windows\System32\drivers\etc\hosts 文件,
增加一個(gè)映射條目:127.0.0.1 www.mymvc-demo.com 即可。
2. 如果您使用的是Windows Server的操作系統(tǒng),也可以自己給自己分配域名,請(qǐng)繼續(xù)閱讀。
在Windows Server的操作系統(tǒng)中,我們可以使用DNS服務(wù)創(chuàng)建自己的域名,大致的過(guò)程是:
1. 創(chuàng)建一個(gè)反向查找區(qū)域。
2. 創(chuàng)建一個(gè)正向查找區(qū)域。
3. 在正向查找區(qū)域新建一個(gè)WWW的主機(jī)。
4. 在IIS中為網(wǎng)站設(shè)置綁定,指向新的域名。
5. 設(shè)置網(wǎng)卡的DNS服務(wù)器地址,指向有DNS服務(wù)的機(jī)器。
這種方式或許對(duì)于單臺(tái)機(jī)器來(lái)說(shuō),比直接修改host文件要麻煩,但如果是在局域網(wǎng)內(nèi)部使用將會(huì)非常方便。
DNS配置的相關(guān)過(guò)程如下:(向?qū)е袥](méi)有貼圖的步驟可以直接確定)




現(xiàn)在我們就可以使用域名的方式來(lái)瀏覽我的示例了:

Fish Li (李奇峰)
浙公網(wǎng)安備 33010602011771號(hào)