.Text学习笔记(一)
看了小春的这篇文章,我觉得有必要贴出我以前未完成的一篇文章,这篇文章也许对理解IHttpHandlerFactory有点帮助。文章如下:
.Text请求处理过程:
请求被分成三种:*.asmx、Error.aspx、其他
- *.asmx被System.Web.Services.Protocols.WebServiceHandlerFactory处理
- Error.aspx被System.Web.UI.PageHandlerFactory
- 其他都被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
这是一篇好文章。
近段时间的工作,需要实现类似.Text的功能,正研究。
现在想向楼主求助.Text完整代码的下载地址,不知道是否可以提供。
近段时间的工作,需要实现类似.Text的功能,正研究。
现在想向楼主求助.Text完整代码的下载地址,不知道是否可以提供。
最主要是这个
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的呵呵..
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的呵呵..
dudu,能不能把你现在这套汉化的BLOG程序源码发一份给我啊,我想研究一下,谢谢了evernory@hotmail.com
我在网站根目录下放了一个.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
分析器错误信息: 找不到文件或程序集名称“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
学习
博客园DotText区有各种版本.Text下载: http://www.cnblogs.com/default.html?id=-17
执行时出现错误: 请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
“/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
还有这一节的配置也有问题啊?
<httpModules>
<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />
</httpModules>
顺便提一下关于web.config配置的问题
我的系统是win2003
<httpModules>
<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />
</httpModules>
顺便提一下关于web.config配置的问题
我的系统是win2003
我把<?xml version="1.0" encoding="utf-8" ?> 前的注释删除掉后就出现上面的<httpModules>节错误
注释掉<add name="ServiceRouter" type= "Dottext.Web.Modules.BlogServiceModule, Dottext.Web" />, BlogServiceModule是提供WebService的, 估计你也用不到。
我的blog版本是096的,在sql2000里建立数据库MyBlog后。
文件夹OtherStuff\SQL Scripts下有095和096两个文件夹,
096下有5个,应该执行那一个呢?
文件夹OtherStuff\SQL Scripts下有095和096两个文件夹,
096下有5个,应该执行那一个呢?

浙公网安备 33010602011771号