天天看點

網站多頻道(轉)

各頻道分别位于不同的Web Project(具有獨立的二級域名),并将所有的業務邏輯以及資料通路功能封裝成Class Library,所有頻道共用這個Class Library。

  下面詳細介紹實作方法。

  假設網站有三個頻道,新聞、論壇以及部落格,對應的二級域名為"news"、"forum"、"blog"。除此之外,還需要另外定義兩個域名,分别用于網站首頁以及使用者注冊、登陸功能(基于Passport機制,本文後面将作詳細介紹),對應域名為"homepage"、"passport"。

  1.配置各頻道URL

  a.配置hosts檔案

  用文本編輯器打開hosts檔案(位于c:\windows或winnt\system32\drivers\etc\),該檔案中存放初始的域名解析資訊。當我們在浏覽器中請求某個URL時,系統首先在hosts檔案中查找相應域名,如果找到則跳轉至指定IP,如果沒找到,則進一步送出DNS進行域名解析。

  配置很簡單,格式形如"[IP][空格][域名]",每條資料對應一行。下面為配置内容:

  192.168.1.2 www.mysite.com

  192.168.1.2 passport.mysite.com

  192.168.1.3 news.mysite.com

  192.168.1.5 forum.mysite.com

  192.168.1.9 blog.mysite.com

  你可能已經注意到了,各頻道對應于不同的IP,這正是該架構的開發靈活性所在。各頻道(Web Project)可以建立于不同的開發者電腦。通過将配置内容同步到各台電腦,可以友善的在各頻道間進行頁面浏覽,就像這些頻道位于你自己的電腦一樣!采用這種方式可以極大降低開發耦合性,每個頻道都是一個獨立的子產品,一個頻道中的Bug不會影響到另一個頻道。

  b.配置Web.Config

  考慮到各頻道二級域名有可能進行調整,将相應配置資訊存放于Web.Config檔案是一個好辦法。同樣的,該配置資訊必須同步到各Web Project。下面為配置内容:

<add key="SiteDomainName" value="mysite.com"/>

<add key="HomepageSiteURL" value="http://www.mysite.com/homepage/"/>

<add key="PassportSiteURL" value="http://passport.mysite.com/passport/"/>

<add key="NewsSiteURL" value="http://news.mysite.com/news/"/>

<add key="ForumSiteURL" value="http://forum.mysite.com/forum/"/>

<add key="BlogSiteURL" value="http://blog.mysite.com/blog/"/>

<add key="LocalSiteURL" value="/blog/"/>

  各配置項說明如下

  SiteDomainName:站點域名,形如"mysite.com"、"mysite.com.cn"、"mysite.net"等。該配置項的使用方法将在後文介紹。

  LocalSiteURL:目前頻道根路徑,也就是Web Project所在網站或虛拟目錄的路徑,以"/"開頭。該配置項主要用于頻道内部的引用,比如圖檔引用、頁面連結等。

  其餘配置項:用于頻道間的引用,比如頻道導航、功能調用等。

  2.建立Model部件

  在MVC模式組成中,Model部件包括所有的業務邏輯操作,其中也包含資料通路操作。

  本方案将Model部件拆分成對象實體、對象操作以及資料通路三部分,封裝成三個Class Library。

  由于Class Library設計本身就是一個很大的話題,本文就不再祥述了,有興趣的話可以參考一些相關資料。

  經驗分享:

  上述的Model部件拆分方式适用于業務功能比較複雜的大型項目,要求團隊内部有着明确、細化的分工合作。但如?????? ?o㧟?果面對的是中小型項目,該方式很有可能成為開發效率的瓶頸。這主要是由項目特點決定的,中小型項目業務功能相比大型項目沒有那麼複雜,開發人員 數量也比較有限,往往一個人要負責整個子產品的開發。在這種情況下,架構層次過于繁多,每次修改一個層時,其他相關層也得跟着同步修改,這樣反而影響了開發 效率。

  3.實作Passport機制

  很多網站都采用Session來存放個人資訊,比如登入資訊,并以次作為使用者登入與否的判斷依據。但Session有一個缺陷,就是無法在多個Web應用中共享,一個Web應用生成的Session隻能由他自己使用。哪種方法可以在多個Web應用中實作資料共享呢?答案是Cookie。Cookie将資訊存放于用戶端, 并在需要時發送回伺服器端。

  Passport,即通行證,是目前普遍采用的一種使用者身份認證機制,簡單來說就是一次登入,全站通行。這也正是我們的要求。

  這裡讨論的通行證機制基于Cookie,實作也比較友善。其中的關鍵點是Cookie的Domain屬性設定,Domain屬性表示 Cookie資訊回發的目标域,也就是接收Cookie的域,接收Cookie的域必須與發送Cookie的域一緻,否則無效。比如:發送域 為"blog.mysite.com",則接收域可以設為"blog.mysite.com"或"mysite.com", 而"news.mysite.com"和"blog.yoursite.com"為無效接收域。要想讓所有頻道都能接收到Cookie,必須将 Domain屬性設定為不帶二級域名字首的形式,如"mysite.com"、"mysite.com.cn"、"mysite.net"等。

  登入成功後向用戶端發送相應Cookie,其中可以包括一些全局資訊,比如使用者編号、使用者名等。使用者退出時删除相應Cookie,特别要注意的是,删除Cookie時也要設定正确的Domain屬性。

  關于該Passport機制,還有兩個問題值得讨論:

  a.Cookie的過期時間

  有兩種方案可以采用,一種是預設方式,即不設定Cookie的Expires屬性,采用這種方案時,Cookie存放于記憶體中,在浏覽器關閉前 Cookie将一直存在,也就是一直處于登入狀态。這種方式主要用于對資訊安全要求不是很高的網站,比如娛樂休閑類網站;另一種是指定明确的過期時間,一 般情況下會将使用者最後一次通路網站的時間加上一個逾時時間段作為過期時間,有點類似于asp中的session逾時機制,這種方式主要用于對安全性要求比較高的網站,比如網上銀行、電子郵箱等。

  b.Cookie的資訊安全

  由于Cookie是以明文方式傳遞資料,不可避免的存在安全隐患,是以對重要資料的加密是非常有必要的。加密可以采用可逆算法,比如DES。

  4.建立Web Project

  前文已提過,Web Project的建立比較靈活,既可以建立于不同的開發者電腦,也可以建立于同一台電腦。這主要取決于開發團隊規模。

  5.部署

  分别部署各頻道,設定二級域名,将Web.Config中的相關配置改為生産環境的實際資料。

  其中比較繁複的工作就是各頻道中相同部分的部署,比如說網站頭部(Logo、導航欄等),網站底部(版權聲明、聯系方式等),圖檔,CSS,JavaScript等。當然也可以把這些公用資源單獨部署于一個頻道中,以供其他頻道調用,但這樣做就破壞了各頻道松耦合的特性,如果用于存放公用資源的頻道出了問題,那其餘頻道也将無法正常使用。

  結束

  本文讨論了asp.net中多頻道網站架構的一種實作方法,由于涉及到的内容較多,無法一一展開,但對其中的重點部分還是多加了點筆墨,希望對你有用:-)

轉載于:https://www.cnblogs.com/tonykan/archive/2012/08/22/2650360.html

繼續閱讀