Bestcomy.net blog

Coding for funny
posts - 115, comments - 2750, trackbacks - 21, articles - 1

通过HttpHandler来部署web控件脚本

Posted on 2005-07-24 20:31 bestcomy 阅读(3645) 评论(11)  编辑 收藏 所属分类: 随笔

很久没有发贴了,主要原因是最近换了新的工作单位,然后又参与一个较为棘手的项目,所以非常繁忙。昨天冒雨参加了北京.net俱乐部的讲座,没想到200人的会议室几乎坐满,见到了许多老朋友,也认识了几个新朋友,都是一群非常有热情的年轻人,其间有几位朋友跟我说起会经常浏览我的blog, 而我最近有很长段时间没有更新我的blog了,实在有点汗颜。难得这个周末休息,而且在项目开发过程中,有些新的收获,希望与大家分享,所以有了这篇blog.

以上废话,以下正文:
很多asp.net server control是基于脚本的,比如iewebcontrols, 安装后会自动在iis根目录下建立脚本文件夹webctrl_client,里面会包含treeview等htc. 但是我从ajax中学到一招部署脚本的方法,自认为很理想,脚本不需要实际部署到web服务器上,只需要作为嵌入资源包含在控件的dll中,使用时只需要在web.config中注册相关的httphandler就可以在运行时将脚本render到客户端。其实这也不算鲜招,这是我现在才想到,而且是受ajax部署脚本的启发。有兴趣的朋友可以看看我基于别人的htc制作的一款combobox控件来体会一下这种用法。
WebControlTest.rar
此控件库包含combobox(基于原发布版本增加了新功能),grouplist,datecontrol(基于梅花日历),inputfile(主要是满足客户变态要求需要改变"浏览..."为其他文本)

Feedback

#1楼    回复  引用  查看    

2005-07-24 23:36 by 木野狐      
包括 web.config 文件也可以在 dll 中动态创建的。那样就是全自动化了。好一点的控件里面都是这样做的。

#2楼    回复  引用  查看    

2005-07-25 00:14 by birdshome      
昨天我还在想这个东西,但一想到asp.net 2.0已经内建支持动态资源了,就懒了一下:} 没想到上来一看,真是瞌睡来了遇到枕头~~ 感谢bestcomy兄share:)

#3楼    回复  引用  查看    

2005-07-25 11:14 by 铱星      
没看明白啊

具体怎么部署?

<httpHandlers>
<add verb="POST,GET" path="Bestcomy/ComboBox.ashx" type="Bestcomy.Web.UI.WebControls.PageHandler, Bestcomy.Web.UI.WebControls" />
<add verb="POST,GET" path="Bestcomy/InputFile.ashx" type="Bestcomy.Web.UI.WebControls.PageHandler, Bestcomy.Web.UI.WebControls" />
</httpHandlers>
起到什么作用?
麻烦讲一下

#4楼    回复  引用    

2005-07-25 13:35 by Bruce [未注册用户]
当浏览器调用Bestcomy/InputFile.ashx文件时,IIS会把请求交给Bestcomy.Web.UI.WebControls.PageHandler这个类去处理,并不要求Bestcomy/InputFile.ashx真实存在这个文件。Bestcomy.Web.UI.WebControls.PageHandler则可以通过输出数据流来完成Bestcomy/InputFile.ashx的模拟。
但是这个方法我觉得小型控件问题不大,大型的控件特别是需要调用的脚本文件较多的情况下,封装在.dll里也不是十分合适,一方面修改起来实在麻烦,另一方面config也要配置一大堆

#5楼    回复  引用    

2005-07-25 21:45 by bestcomy [未注册用户]
Bruce 已经讲得很清楚了,看看Bestcomy.Web.UI.WebControls.PageHandler类就知道具体的处理机制了

#6楼    回复  引用    

2005-07-25 22:52 by lion [未注册用户]
bestcomy 兄弟

以前我们讨论大文件上传时,我改过你的一个例子,不知道还记得吗
那个是将html文件做成了资源文件,动态加载显示上传进度,当然也可以动态加载脚本,WebHtmlEditor就是采用了这种方式加载javascript进行处理

感觉你的这个方法要在Web.Config中进行配置稍微麻烦一些,希望可以交流一下

#7楼 [楼主]   回复  引用  查看    

2005-07-25 23:21 by bestcomy      
你说的这种方式有个问题就是需要自动向web服务器写文件,很多时候因为没有写权限出错,用这种handler的方式就是不需要向web服务器写文件,感觉程序比较“干净”,完全是个人偏好。iewebcontrol就是用的你说的那种方式。

#8楼    回复  引用    

2005-07-26 07:30 by lion [未注册用户]
思想都是一样的
我的方法确实要向服务器写一个文件,这个文件也可以上传上去,如果程序发现文件以存在并且和资源文件中的版本一致就不会再写

#9楼    回复  引用  查看    

2005-08-08 00:18 by 雪叶丹枫      
关于Web控件开发我的想法不知道是否正确:从单个Web控件开发来考虑可以将脚本嵌入到Web控件的DLL中,这样带来的一个后果是每次浏览该Web控件,这些脚本将会传送一次到客户端(从一些资料看:只有引用方式的CSS文件和JS文件才会缓冲到客户端)。 在实际项目中需要考虑的一点是,随着应用的复杂度加深,你可能会应用大量的这类控件,这些控件造成的网络流量可能就会成为需要考虑的问题了,因此我在项目中开发Web控件时并不考虑这个Web控件的通用性,在Web控件中以引用的方式调用项目中的公用CSS文件和JS文件或HTC文件(通常都是需要配合一定的目录结构以便获取)

#10楼 [楼主]   回复  引用    

2005-08-08 10:09 by bestcomy [未注册用户]
"从一些资料看:只有引用方式的CSS文件和JS文件才会缓冲到客户端"
可否列出相关资料?
是否明确说过用httphandler方式的无法缓存到客户端呢?
在Response时设置其缓存应该是可以做到客户端缓存的,实际测试的时候我也发现对脚本的更改需要清掉IE缓存之后才生效

#11楼    回复  引用    

2005-09-15 17:10 by 视频会议 [未注册用户]
呵呵,楼主啊,能忙是一种幸福啊!:)
推荐一个网络视频会议软件:<a href=" http://www.eyesom.com ">视频会议/网络视频会议</a>

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: