chiname

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

.Text学习笔记(一)

.Text学习笔记(一)

Posted on 2004-04-24 17:32 dudu 阅读(2732) 评论(26)  编辑 收藏
看了小春的这篇文章,我觉得有必要贴出我以前未完成的一篇文章,这篇文章也许对理解IHttpHandlerFactory有点帮助。文章如下:
.Text请求处理过程:
请求被分成三种:*.asmx、Error.aspx、其他
  1. *.asmx被System.Web.Services.Protocols.WebServiceHandlerFactory处理
  2. Error.aspx被System.Web.UI.PageHandlerFactory
  3. 其他都被Dottext.Common.UrlManager.UrlReWriteHandlerFactory
所以研究.Text的请求处理过程,关键是理解Dottext.Common.UrlManager.UrlReWriteHandlerFactory如何处理请求的?
Dottext.Common.UrlManager.UrlReWriteHandlerFactory实现了IHttpHandlerFactory接口,该接口只有两个成员GetHandler(返回实现 IHttpHandler 接口的类的实例),ReleaseHandler(使工厂可以重用现有的处理程序实例)。.Text中是如何根据不同的请求得到不同的HttpHandler?所有有关HttpHandler的配置信息都放在web.config的<HandlerConfiguration>中。<HandlerConfiguration>被返序列化产生Dottext.Common.UrlManager.HandlerConfiguration的实例。通过Dottext.Common.UrlManager.HandlerConfiguration的属性HttpHandlers就可以得到所有的HttpHandler。在UrlReWriteHandlerFactory.GetHandler中,通过正则表达式,获得不同请求的HttpHandler。这里的HttpHandler实际上是Dottext.Common.UrlManager.HttpHandler类的实例。HttpHandler有个属性HandlerType,HandlerType是enum变量,UrlReWriteHandlerFactory根据HandlerType来对不同的请求进行处理。HandlerType有三个值Page、Direct、Factory。
 
现在,我们以Page类型(也是默认类型)为例,说明一下具体的处理过程:
对于Page类型,由UrlReWriteHandlerFactory.ProccessHandlerTypePage()处理,在ProccessHandlerTypePage中,先得到FullPageLocation,在web.config中可以配置,默认是DTP.aspx,然后调用HandlerConfiguration.SetControls(它只一行处理语句:context.Items.Add("Dottext.Common.UrlManager.ControlContext",controls);),context.Items是IHttpModule 和 IHttpHandler 之间共享数据区。这里我的理解是:将需要显示哪些controls的配置信息存储在context.Items中,以便在后来的处理中从context.Items读取(实际上是在DottextMasterPage中读取并显示controls的,这就是.Text中动态加载ASC控件的原理)。最后,通过PageParser.GetCompiledPageInstance(url,pagepath,context);返回一个HttpHandler,该方法的功能我的理解是为url请求创建一个pagepath的实例,类似于Response.Redirect。

Feedback

# re: .Text学习笔记(一)   

2004-04-24 21:15 by 笨笨蜗牛
这是一篇好文章。

近段时间的工作,需要实现类似.Text的功能,正研究。

现在想向楼主求助.Text完整代码的下载地址,不知道是否可以提供。

# re: .Text学习笔记(一)   

2004-04-24 22:58 by dudu
请到这里下载: http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=e99fccb3-1a8c-42b5-90ee-348f6b77c407

# re: .Text学习笔记(一)   

2004-04-26 09:49 by 笨笨蜗牛
非常感谢楼主,已下载,正研究中。

# re: .Text学习笔记(一)   

2004-04-26 10:01 by 小春
我昨天晚上又仔细研究了下波仔的那个示例,有新的发现:)

有空我再试试能不能实现

也感谢DUDU的这篇文章,

# re: .Text学习笔记(一)   

2004-04-29 10:54 by Taye
最主要是这个
public abstract Type PageType
{
get;
}


public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string path)
{
return (IHttpHandler)Activator.CreateInstance(PageType);//, 564, null, args, null);
}
这两个..反回哪个实现IHttphandler接口的类..在.Text全是从Page中继承.
好象IHttpHandlers中并没有很特别的地方..
感觉主要在Pages那边去了.

另在blog.config中的<HttpHandlers>的顺序有关的...
我现在看得还是0.94的呵呵..

# re: .Text学习笔记(一)   

2004-04-30 12:44 by vibration
不错,收藏:)

# re: .Text学习笔记(一)   

2004-05-04 21:24 by Rover
To小春:波仔的那个程序在哪下,微软的社区的那篇文章好像不能下

# re: .Text学习笔记(一)   

2004-07-23 16:08 by Evernory
dudu,能不能把你现在这套汉化的BLOG程序源码发一份给我啊,我想研究一下,谢谢了evernory@hotmail.com

# re: .Text学习笔记(一)   

2004-08-20 21:21 by imp
把皮肤汉化一下就可以了

# re: .Text学习笔记(一)   

2004-08-20 21:24 by dragonimp
你这个会不会 有时候贴在每行得第一个空格变成 ? 得情况啊?

# re: .Text学习笔记(一)   

2004-08-20 21:30 by dudu
@dragonimp 
没遇过这个问题。

# re: .Text学习笔记(一)   

2004-08-28 21:24 by hyouhaku
我在网站根目录下放了一个.text的blog,谁知其他几个虚拟目录下的.net程序每次运行都要读根目录下的web.config文件,然后就出错了,怎么解决呢? 
分析器错误信息: 找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。 

源错误:  


行 145:     
行 146:    <httpModules> 
行 147:        <add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" /> 
行 148:    </httpModules> 
行 149:         

Dottext.Web是blog调用的,问题是我请求的路径和Dottext.Web一点关系都没有 
档案 搜索 邮件 短信 引用 编辑 删除 屏蔽/恢复 第4楼  

能不能让他不要读根目录下的web.config?  
我的网址  

2004-11-11 21:04 by CHEP
学习

# re: .Text学习笔记(一)   

2005-03-04 00:27 by cassini
dottext的完整源码载哪里下载?具体的链接,下载方法?

# re: .Text学习笔记(一)   

2005-03-04 07:03 by dudu
博客园DotText区有各种版本.Text下载: http://www.cnblogs.com/default.html?id=-17

# re: .Text学习笔记(一)   

2005-05-19 13:37 by cassini
win2003下建立映射时(.*)出现错误,“错误的文件格式”,这个问题应该怎么解决?

# re: .Text学习笔记(一)   

2005-05-19 13:59 by dudu
应该在“通配符应用程序映射”中插入asp.net执行文件路径。

# re: .Text学习笔记(一)   

2005-05-19 21:53 by cassni
执行时出现错误: 请dudu帮忙解释一下?

“/blog”应用程序中的服务器错误。
--------------------------------------------------------------------------------

配置错误
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。

分析器错误信息: 意外的 XML 声明。 行 11,位置 3。

源错误:


行 9: DELETE THESE COMMENTS WHEN YOU ARE DONE!
行 10: -->
行 11: <?xml version="1.0" encoding="utf-8" ?>
行 12: <configuration>
行 13:


源文件: E:\DotText096\DottextWeb\web.config 行: 11


--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.573; ASP.NET 版本:1.1.4322.573

# re: .Text学习笔记(一)   

2005-05-19 21:55 by dudu
把<?xml version="1.0" encoding="utf-8" ?> 前的注释删除掉。

# re: .Text学习笔记(一)   

2005-05-19 21:58 by cassni
还有这一节的配置也有问题啊?
<httpModules>
<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />
</httpModules>
顺便提一下关于web.config配置的问题

我的系统是win2003

# re: .Text学习笔记(一)   

2005-05-19 22:01 by cassini

我把<?xml version="1.0" encoding="utf-8" ?> 前的注释删除掉后就出现上面的<httpModules>节错误

# re: .Text学习笔记(一)   

2005-05-19 22:01 by dudu
注释掉<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />, BlogServiceModule是提供WebService的, 估计你也用不到。

# re: .Text学习笔记(一)   

2005-05-19 22:09 by cassni
我的blog版本是096的,在sql2000里建立数据库MyBlog后。
文件夹OtherStuff\SQL Scripts下有095和096两个文件夹,
096下有5个,应该执行那一个呢?

# re: .Text学习笔记(一)   

2005-05-19 22:12 by dudu
请到 http://forums.cnblogs.com/ShowForum.aspx?ForumID=34 交流。

# re: .Text学习笔记(一)   

2005-05-20 00:06 by cassini
终于自己搞定了,谢谢dudu!

# re: .Text学习笔记(一)   

2005-06-27 11:59 by 小韩
请问博克园首页的宣传语是怎么加上的吗?
posted on 2005-07-01 13:40  把我的欢乐带给你  阅读(532)  评论(0)    收藏  举报