2007-09-29

過時的 System.Net.WebProxy.GetDefaultProxy()

今天在把一個有用到 System.Net.WebProxy.GetDefaultProxy() 類別的程式從 .NET 1.1 升級到 .NET 2.0, 編譯器警告說這個方法已經過時, 訊息是:

This method has been deprecated. Please use the proxy selected for you by default. http://go.microsoft.com/fwlink/?linkid=14202

奇怪的是, 它並沒有像其他的警告訊息會告訢我們一個取代的方法, 怎麼辦呢? 趕快打開 Reflector 查一下, 原來該方法是呼叫一個未開放的建構子 internal WebProxy(bool enableAutoproxy) 來取得系統預設的 Proxy 設定! 嗯? 難道要用 Reflection 的方式去呼叫嗎? 那樣子就太遜了吧!!

馬上想到之前也有一個類似的過時屬性 GlobalProxySelection.Select, .NET 2.0 建議改成 WebRequest.DefaultProxy, 所以就轉向 WebRequest 去試著尋找答案, 果然找到一個 WebRequest.GetSystemWebProxy() 的方法, 看名字就覺得是它了, 但還是要再確認一下, 稍微用 Reflector 再追了一下, 果然看到 new WebProxy(true) 出現在 InternalGetSystemWebProxy() 方法中! 肯定是它了!

搞定!! (真是的, 既然要改變作法, 說明就該寫清楚一點嘛, 還要讓人自己找!)

沒有留言: