打造可持续发展的事业

事业像系统的框架,要稳定、可扩展,同样需要精心设计的!

DNN详解(1)-Web.Config

 

 

多年以来,还是觉得DNN是一个非常出色的框架,非常实用的框架。

在熟悉Web.Config的过程中,我们可能会涉及很多其他方面的知识,不过大家可以去Google一下。

Web.Config在哪?

在解压文件包之后,安装DNN之前,Web.config的文件名叫release.config。运行前要修改文件名为Web.config,要修改里面的数据库连接串,并且一定要将该网站虚拟目录Asp.net的版本设置为2.0,否则有些Web.Config里面的东西解析不了。

第一次运行这个网站会自动执行安装动作,包括创建数据库中的相关对象(表/存储过程等)。最后程序会修改Web.config。有些变化:

<!--use as persistent cookie expiration. Value is in minutes, and only active if a non-zero figure-->

     <addkey="InstallationDate"value="8/24/2007"/>

如何判断是不是第一次运行网站是不是要执行安装动作,其实并不是通过Web.Config中的设置来判断的,而是通过数据库中Version这个表中的记录来控制的,在Global.asax中实现的。

System.Web

在这个节里,最重要的就是httpModuleshttpHandles。他们两个说白了就是:

Handler用来处理某种路径下某种后缀名的文件请求。

Modules就是一层一层的过滤器了,就是一个请求在服务器端要经过这些Module处理一下!

Modules的特点就是能够在请求的上行下行(指到Web核心处理)都能额外对请求进行处理,可以看到Modules包含了:

Compression   压缩和解压,通过配置去更改算法

RequestFilter对服务器端变量进行过滤,来决定页面跳转情况

UrlRewrite    URL重写,这个是为了避免“变量?值”在URL中影响可读性及搜索引擎查找。

Exception     重载了HttpApplication.Error事件,形成自己对异常的处理方式。

UsersOnline   重载了HttpApplication.AuthorizeRequest事件,对在线的注册和匿名用户进行统计。

DNNMembership 获取认证的相关信息,并从数据库中加载个性化信息

Personalization个性化,主要是保存个人上下文在数据库中

ScriptModule 是一个外部函数来处理的

Handler就是针对不同的文件类型(Path)及请求(Verb)动作采用不同的处理方式。

例如:处理验证码,处理RSS,处理AJAX。处理RSS请求的设置如下:
   <!-- This adds syndication support -->
   <add verb="*" path="RSS.aspx" type="DotNetNuke.Services.Syndication.RssHandler, DotNetNuke"/>


关于Handle和Module参见http://www.cnblogs.com/PM_2004/archive/2004/07/30/28625.html

 

Providers

Provider是目前ASP.Net普遍采用的一种设计模式。可以方便实现不同的策略。

web.Config的表现就基本上是如下套路:

<configSections>
    <section name="SomeProvider" type="My.Provider.SomeProviderConfigurationSection, My.Provider" />
</configSections>
<SomeProvider defaultProvider="theProvider">
    <providers>      
      <add name="theProvider" type="My.Pattern.Provider.theProvider, My.Provider" />

    </providers>

</SomeProvider>

这一段包含了一些信息:如何处理<SomeProvider></SomeProvider>节的方法

SomeProviderConfigurationSection,因为你可能还要在<add></add>节中加入一些额外的参数。

theProvider是真正被实例化的处理具体请求的Provider

DNNWeb.Config中的<dotnetnuke></dotnetnuke>中都是这些Provider的栖身之所。这些provider节的处理方法在<configSections></configSections>中定义了

其他的节

codeSubDirectories

      <codeSubDirectories>

         <add directoryName="sub-directory name"/>

      </codeSubDirectories>

如果你有模块放在"App_Code的某一个子目录下,而且你不是用缺省的语言VB开发的比如C#,你应该在这里登记一下该目录。

v

posted on 2007-08-24 18:52  PM2004  阅读(1718)  评论(0编辑  收藏  举报

导航