ASP.NET多频道网站架构实现方法

转载 2007年10月06日 15:07:00

主体架构
 

  各频道分别位于不同的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中多频道网站架构的一种实现方法,由于涉及到的内容较多,无法一一展开,但对其中的重点部分还是多加了点笔墨,希望对你有用:-)

 

相关文章推荐

ASP.NET多频道网站架构实现方法

主体架构   各频道分别位于不同的Web Project(具有独立的二级域名),并将所有的业务逻辑以及数据访问功能封装成Class Library,所有频道共用这个Class Library。  ...

asp.net网站架构

网站所有内容:

实战ASP.NET大规模网站架构:Web加速器

摘要:大规模网站瓶颈之一就是性能问题,如何让你的网站飞速运转起来,一直是架构师和开发人员苦于思考的问题,文章仅针对基于ASP.NET开发的网站交互性非实时部分进行讨论,实时交互部分解决方案将在后续部分...

.Net网站架构设计(五) 消息中间件

.Net网站架构(五)消息队列 在设计互联架构是,往往遇到需要推送消息,而推送消息比较耗时。 做法        1:直接执行业务,调用推送         int ...

ASP.NET做SEO:制作架构清晰和更新及时的网站地图

网站地图的作用是让搜索引擎尽快的,更多的收录网站的各个网页。 这里我们首先要明白一个基本的原理,搜索引擎的爬行方式。整个互联网就像一张纵横交错的“网”:网的各个节点就是各个网页,而各个网页之间通...

分享高性能ASP.NET网站的系统架构设计

大型动态应用系统平台主要是针对于大流量、高并发网站建立的底层系统架构。大型网站的运行需要一个可靠、安全、可扩展、易维护的应用系统平台做为支撑,以保证网站应用的平稳运行。    大型动态应用系统又可分为...
  • wnety
  • wnety
  • 2011-06-29 17:44
  • 697

ASP.NET实现多域名多网站共享Session值

ASP.NET实现多域名多网站共享Session值   1、实现功能:可设置哪些站点可以共享Session值,这样就防止别人利用这个去访问   要想实现这个功能就必须得把Session值 放入数据...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)