宝玉的blog

专注于web开发技术
随笔 - 78, 评论 - 1563, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:37
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:31
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:30
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:29
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Silverlight中,防止ComboBox抢焦点
    在家”用网路”赚全世界的钱! 这是真正实现跨国事业最好的机制。藉由网路无远弗届的力量, 让全球超过180个国家变成一个单一市场,在你加入的那一刻, 网路能到达的地方,就是你收入能到达的地方。 ...
    by jackielongteng(注册) on 2009/6/14 13:19:48
  • re:Silverlight中,防止ComboBox抢焦点
    <p>我是初学者,您已经写了一个 组件上传的功能 。。我在2008下测试通过,,,但是弄2005测试的时候 发现 progress.aspx.cs页面的</p> <p&...
    by jxh12345j(注册) on 2009/4/7 8:55:12
  • ufnnutdh - Google Search
    ufnnutdh - Google Search
    by (匿名) on 2008/10/27 17:44:45
  • veysaync - Google Search
    veysaync - Google Search
    by (匿名) on 2008/10/5 5:20:49
  • mzgmhgio - Google Search
    mzgmhgio - Google Search
    by (匿名) on 2008/9/22 23:34:49
  • rhmhnyma - Google Search
    rhmhnyma - Google Search
    by (匿名) on 2008/9/22 7:48:44
  • re: 发布一个爱心小软件——网页抓图
    Maxthon应该有这个功能
    by passos(匿名) on 2008/7/21 20:05:23

广告

 

HttpModule 是个好东西,很多程序都有用到,例如DotText、Asp.Net Forums等,但是有一个问题,当我们将使用了HttpModule 的程序设置为站点根目录(以将DotText设置为站点目录为例),然后再在根目录下建虚拟目录,运行虚拟目录里的asp.net程序会提示出错:

分析器错误信息: 找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。

源错误:

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

也就是说对于虚拟目录中的asp.net应用程序,会首先去加载其所在站点中的HttpModule,而一般虚拟目录中的bin目录是不会有HttpModule所在的DLL的,所以就会出如上的错误。
注意,其中的错误提示信息(找不到文件或程序集名称“Dottext.Web”,或找不到它的一个依赖项。)很有误导性,一开始让我以为是需要每个虚拟目录拷贝一个Dottext.Web.dll进去呢,但是将dll拷贝过去后,其HttpModule会对虚拟目录中的asp.net应用程序产生影响,因此这个问题曾让我郁闷了很久。

后来偶然查msdn中,发现web.config里面的HttpModule是有三种子节点的:
<httpModules>
   <add
type="classname,assemblyname" name="modulename"/>
   <remove name="modulename"/>
   <clear/>
</httpModules> 

子标记 说明
<add> 将 HttpModule 类添加到应用程序。 请注意,如果以前已指定了相同的谓词/路径组合(例如在父目录的 Web.config 文件中),则对 的第二个调用将重写以前的设置。
<remove> 从应用程序移除 HttpModule 类。
<clear> 从应用程序移除所有 HttpModule 映射。

唉,其实看到add也应该想到remove的,在虚拟目录中的web.config中Remove一下不需要的HttpModule,发现果然没有问题了!如:
<httpModules>
    <remove
name="ServiceRouter"/>
</httpModules>
 

注意一般表用<clear/>,因为用<clear/>会把machine.config中定义的httpModule一起清除了从而导致asp.net程序不能正常运行。

有一点我很疑惑的是既然都是用remove移除这个HttpModule了,为什么还需要将该HttpModule对应的dll拷贝到虚拟目录的dll下。

httpHandlers的处理方法也类似。

打印 | 张贴于 2004-11-30 18:42:00 | Tag:Web技术

留言反馈

#回复: HttpModule的移除 编辑
一直在找这种解决方法,这样不错
2007-05-15 17:50:00 | [匿名用户:dotnet源码学习]
#回复: HttpModule的移除 编辑
同样的问题,今天也遇到了,只好暂时拷贝dll先解决问题,无法跳过上级目录的web.config先执行
有想讨论的可以boat2008#gmail/com
2007-02-02 11:12:00 | [匿名用户:战国]
#re: HttpModule的移除 编辑
这样做岂不是会卸载了该站点下需要的某些功能,应该是不允许这么做的吧。
还有就是站点下运行建立其他虚拟目录吗??
2006-11-11 20:12:00 | [匿名用户:ocan]
#asp.net 多web.config下的httphandler 编辑
asp.net的多web.config中的http handler定义居然有这么多问题,服了~~
2006-06-06 05:59:00 | [匿名用户:Forever Blue Baggio]
#re: HttpModule的移除 编辑
还是需要拷贝dll进去,不爽
2005-10-07 10:56:00 | [匿名用户:jeky]
#re: HttpModule的移除 编辑
当时就因为这个原因迟迟没有换CS
2005-08-30 10:26:00 | [匿名用户:hyouhaku]
#re: HttpModule的移除 编辑
不错,值得收藏!
2005-06-22 21:26:00 | [匿名用户:http://www.yx57.com]
#re: HttpModule的移除 编辑
你还得把dll拷贝进去
2005-03-01 16:47:00 | [匿名用户:宝玉]
#re: HttpModule的移除 编辑
在虚拟目录中用REMOVE 移除根目录相应的站点名称,问题依旧。
2005-03-01 16:35:00 | [匿名用户:victor]
#re: HttpModule的移除 编辑
明白了,谢谢lostinet
2004-12-02 08:47:00 | [匿名用户:宝玉]
#re: HttpModule的移除 编辑
asp.net在处理这个add的配置节的时候就立刻检查type是否存在。
因为<clear/>是放在次要的config中的,
所以主要config文件里的<add/>要比次要文件的<clear/>提早被处理,
那么如果在处理<add/>的时候,并没有这个type(没有把dll复制过去或者放GAC),那么ASP.NET就会把找不到类型的异常直接抛出。

所以,这个需要把相关的DLL都要部署一下的。而<clear/>的作用只是取消加载相关的东西,但是却无法跳过类型检查。

(remove原理与clear相同)

httpHandler则有点不同,它是在需要创建指定的handler时才去检查类型是否能加载的。
2004-12-02 04:27:00 | [匿名用户:Lostinet]
#re: HttpModule的移除 编辑
重现了一下宝玉所描述的场景。
出现问题的原因是在站点级别建立的属于dottext特有的httpmodule和httphandler并不在cnforums中用到,而该场景却将使得dottext的web.config所注册的httpmodule均应用到其下的所有虚拟目录中,根据machine.config=>站点web.config=>虚拟目录web.cofing的继承关系,这是正确的。正是因为这些配置信息应用到了cnforums虚拟目,而比如出错的httphandler
<add verb="*" path="*" type="Dottext.Common.UrlManager.UrlReWriteHandlerFactory,Dottext.Common" />
在访问cnforums时,Dottext.Common.dll就无法找到了,因为它不存在于全局缓存中,也不存在于cnforums下的bin目录中,所以产生了宝玉描述的错误。因此,解决的方案正如宝玉所提供的,在不需要应用站点级别的某些特定的httpmodule和httphandler的虚拟目录中将其移除。

而我提出的解决方法基于以下的假设,站点级别注册过的httpmodule或者httphandler在站点级别和cnforums虚拟目录中均用到,因此无需再在虚拟目录中的web.config中注册了。基于这样一个错误的假设提出了一个解决办法,深感抱歉。

以上言论如果有不妥之处,虚心接受批评。
2004-12-01 19:57:00 | [匿名用户:bestcomy]
#re: HttpModule的移除 编辑
因未经测试,我所说的解决办法可能不妥,晚些时候测试之后贴出结果,如果造成误导,务必谅解。
2004-12-01 10:04:00 | [匿名用户:bestcomy]
#re: HttpModule的移除 编辑
to bestcomy :
web.config里面的很多东西必须在站点或者虚拟目录根目录下才能注册呢,这个可能是asp.net的设计吧。
你说的去掉是怎么一回事?我现在在web.config中remove掉也算是去掉阿:)
2004-12-01 09:30:00 | [匿名用户:宝玉]
#re: HttpModule的移除 编辑
另外,你的本则blog所描述的问题,应该有另外一种很直接的解决办法,那就是去掉在虚拟目中的web。config中已经在站点级别注册过的httpmodule注册,我觉得应该是可行的
2004-12-01 09:28:00 | [匿名用户:bestcomy]
#re: HttpModule的移除 编辑
阿宝,你有没有注意到另外一个问题:
如果httpmodule是在虚拟目录下的某个子目录中的web.config中注册,则该httpmodule则不能工作,如果可以像httphandler那样能工作就爽了。
2004-12-01 09:22:00 | [匿名用户:bestcomy]
#re: HttpModule的移除 编辑
I was also burned once by this configuration inheritance. I don't mind inheritance from machine.config. But inheriting the configurations in the web.config from a root web application is too much to bear
2004-11-30 22:40:00 | [匿名用户:saucer]
#re: HttpModule的移除 编辑
谢谢!一直被这个问题因扰,没找到解决方法。
2004-11-30 20:02:00 | [匿名用户:dudu]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.0