.Text学习笔记(一)

看了小春的这篇文章,我觉得有必要贴出我以前未完成的一篇文章,这篇文章也许对理解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。
posted @ 2004-04-24 17:32 dudu 阅读(6011) 评论(29)  编辑 收藏

  回复  引用  查看    
#1楼 2004-04-24 21:15 | 笨笨蜗牛      
这是一篇好文章。

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

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

  回复  引用  查看    
#3楼 2004-04-26 09:49 | 笨笨蜗牛      
非常感谢楼主,已下载,正研究中。
  回复  引用    
#4楼 2004-04-26 10:01 | 小春 [未注册用户]
我昨天晚上又仔细研究了下波仔的那个示例,有新的发现:)

有空我再试试能不能实现

也感谢DUDU的这篇文章,
  回复  引用    
#5楼 2004-04-29 10:54 | 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的呵呵..
  回复  引用  查看    
#6楼 2004-04-30 12:44 | vibration      
不错,收藏:)
  回复  引用    
#7楼 2004-05-04 21:24 | Rover [未注册用户]
To小春:波仔的那个程序在哪下,微软的社区的那篇文章好像不能下
  回复  引用  查看    
#8楼 2004-07-23 16:08 | Evernory      
dudu,能不能把你现在这套汉化的BLOG程序源码发一份给我啊,我想研究一下,谢谢了evernory@hotmail.com
  回复  引用    
#9楼 2004-08-20 21:21 | imp [未注册用户]
把皮肤汉化一下就可以了
  回复  引用    
#10楼 2004-08-20 21:24 | dragonimp [未注册用户]
你这个会不会 有时候贴在每行得第一个空格变成 ? 得情况啊?

  回复  引用  查看    
#11楼 2004-08-20 21:30 | dudu      
@dragonimp 
没遇过这个问题。
  回复  引用    
#12楼 2004-08-28 21:24 | 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?  
我的网址http://poy.cn 比如http://poy.cn/forum就访问不了 
web.config文件:http://poy.cn/web.config.txt
  回复  引用    
#13楼 2004-11-11 21:04 | CHEP [未注册用户]
学习

  回复  引用    
#14楼 2005-03-04 00:27 | cassini [未注册用户]
dottext的完整源码载哪里下载?具体的链接,下载方法?
  回复  引用  查看    
#15楼 [楼主]2005-03-04 07:03 | dudu      
博客园DotText区有各种版本.Text下载: http://www.cnblogs.com/default.html?id=-17
  回复  引用    
#16楼 2005-05-19 13:37 | cassini [未注册用户]
win2003下建立映射时(.*)出现错误,“错误的文件格式”,这个问题应该怎么解决?
  回复  引用  查看    
#17楼 [楼主]2005-05-19 13:59 | dudu      
应该在“通配符应用程序映射”中插入asp.net执行文件路径。
  回复  引用    
#18楼 2005-05-19 21:53 | 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
  回复  引用  查看    
#19楼 [楼主]2005-05-19 21:55 | dudu      
把<?xml version="1.0" encoding="utf-8" ?> 前的注释删除掉。
  回复  引用    
#20楼 2005-05-19 21:58 | cassni [未注册用户]
还有这一节的配置也有问题啊?
<httpModules>
<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />
</httpModules>
顺便提一下关于web.config配置的问题

我的系统是win2003
  回复  引用    
#21楼 2005-05-19 22:01 | cassini [未注册用户]

我把<?xml version="1.0" encoding="utf-8" ?> 前的注释删除掉后就出现上面的<httpModules>节错误
  回复  引用  查看    
#22楼 [楼主]2005-05-19 22:01 | dudu      
注释掉<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />, BlogServiceModule是提供WebService的, 估计你也用不到。
  回复  引用    
#23楼 2005-05-19 22:09 | cassni [未注册用户]
我的blog版本是096的,在sql2000里建立数据库MyBlog后。
文件夹OtherStuff\SQL Scripts下有095和096两个文件夹,
096下有5个,应该执行那一个呢?

  回复  引用  查看    
#24楼 [楼主]2005-05-19 22:12 | dudu      
  回复  引用    
#25楼 2005-05-20 00:06 | cassini [未注册用户]
终于自己搞定了,谢谢dudu!
  回复  引用    
#26楼 2005-06-27 11:59 | 小韩 [未注册用户]
请问博克园首页的宣传语是怎么加上的吗?
  回复  引用    
#27楼 2006-03-08 13:34 | jason.zhang [未注册用户]
今日得以见到高人,方知天外有天呀
  回复  引用    
#28楼 2006-06-20 09:26 | 2 [未注册用户]
@cassini

  回复  引用    
#29楼 2006-06-20 09:31 | 2 [未注册用户]
@小韩
@2
@dudu


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-04-24 17:38 编辑过
 
另存  打印