在ASP.NET服务器端过程中使用WebBrowser的注意事项
2010-08-01 13:21 Nana's Lich 阅读(6147) 评论(7) 编辑 收藏 举报昨天刚刚完成了一个从网页上提取内容的ASP.NET程序。因为目标网页内容比较复杂,所以采用了WebBrowser来代替WebClient。
但是,在本地写好的程序,放到了服务器上就停止工作了,也找不到任何异常提示……
在浪费了十几个小时的人生之后,终于发现是因为缺少了引用的程序集——为了处理网页上较为复杂的网页元素,我在程序中使用了MSHTML中声明的接口,然而不知道出于什么样的原因,在项目的引用列表中MSHTML被标记为不复制到本地,发布到服务器上的时候自然也不会包含。更有趣的是,期间我编写WinForms应用程序来检验程序逻辑,放到服务器上运行时也没有任何加载错误,而是单纯地不能使用使用了来自MSHTML的接口的过程,害我以为是事件处理过程哪里写错了……
另一个需要注意的事情是:
有文章指出在ASP.NET中使用WebBrowser最重要的条件是使用STA线程模型,然后使用System.Forms.Application.Run来创建消息循环;文章中还说,对于ASP.NET来说WinForm窗体是不必要的,所以System.Forms.Application.Run(new System.Forms.ApplicationContext())就可以了——但经实际测试,在Windows Server 2003 + IIS6上运行的话,如果WebBrowser并没有创建在窗体上,则在发生跳转时不会引发DocumentComplated事件;而在Windows 7+WebDev Server上是不会观察到这种现象的。
除了WebBrowser以外,还有一些关于WinForms的发现:
在Load事件中调用Hide方法可能没有效果,而放在Shown中就可以了——但用户会观察到窗体一闪而过。
覆盖SetVisibleCore可以阻止主窗体显示,但也会导致很多事件不能正常触发。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?