『飞秋』在ASP.NET服务器端过程中使用WebBrowser的注意事项
昨天剛剛完成了一個從網頁上提取內容的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可以阻止主窗體顯示,但也會導致很多事件不能正常觸發。
飛秋官網:http://www.freeeim.com/
總結
以上是生活随笔為你收集整理的『飞秋』在ASP.NET服务器端过程中使用WebBrowser的注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注重实效的程序员
- 下一篇: 了结对编程和飞鸽传书