【程式設計環境】Visual Studio 2010, NET4.0
【開發語言】C#, 理論上VB.NET等依賴.NET Framework框架的語言均受此影響
【問題描述】
使用HttpWebRequest抓取網頁內容,但首次請求總是莫名奇妙的阻塞在Request.GetResponse();上,不過一旦這次請求成功,後續的操作就很快了(如果是針對同一物件)。
相同的代碼編譯在NET3.5環境中卻一切正常,而在NET4.0環境中執行就出這問題,難道是一個BUG?
【解決方案】
在設定檔中(app.config)中添加配置節:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version="1.0"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <system.net> <defaultProxy enabled="false" useDefaultCredentials="false" > <proxy/> <bypasslist/> <module/> </defaultProxy> </system.net> </configuration> |
【問題所在】
.NET4.0中的預設代理是開啟的,而我並沒有設置!故只有等待超時後才會繞過代理,這就阻塞了.
【參考資料】
"It's not set at all in app.cong or machine.config. Hmm. If I'm reading the
MSDN docs right, the default for defaultProxy.enabled is TRUE if the element
isn't specified at all. That would be consistent with my observations.
"
http://msdn2.microsoft.com/en-us/library/kd3cf2ex(VS.80).aspx
【問題引申】
如果在其它版本的.NET環境中遇到類似問題,不妨嘗試WebClient.Proxy = null;或HttpWebRequest.Proxy = null.
【總結】
問題往往出於不注意,我們要多加'小心'.
希望能幫到您!
沒有留言:
張貼留言