2010-01-08 63 views
3

我正在編寫的應用程序需要使用.Net Remoting(我知道WCF是'新事物',但不幸的是,這不是我們目前可用的選項)。如何通過Web代理使用.Net Remoting?

無論如何,如果我不嘗試通過代理使用應用程序,一切正常。但是,應用程序需要能夠通過代理Web服務器運行。我設置了一個HttpChannel,並將'proxyName'和'proxyPort'屬性設置爲正確的值。這使得通道使用代理服務器沒有問題。

我有以下問題:

1:如果代理服務器要求身份驗證,似乎沒有辦法設置通道應使用與代理要權威性的憑據。我已經嘗試了'憑據'屬性,'用戶名'和'密碼'屬性,但它似乎不起作用。因此,最終導致代理服務器需要驗證,並且只要調用遠程方法就返回驗證錯誤。

2:我似乎無法讓HttpChannel使用默認的系統Web代理。如果Internet Explorer配置爲使用代理,那麼我應該可以使用WebRequest.GetSystemWebProxy()來獲取它。但是,這返回一個IWebProxy,我不能從中提取主機和端口。如果有人知道如何做到這一點,我將不勝感激。

令人沮喪的是,如果您使用Visual Studio單步執行代碼並檢查HttpChannel類,則會出現WebProxy對象。如果他們提供訪問權限,生活將會變得如此簡單!

所以基本上我問的是如何在地球上得到一個HttpChannel正確使用Web代理 - 記住我需要能夠使用需要身份驗證的代理,檢測Internet Explorer代理設置?有沒有更簡單的方法來實例化通道,以便我可以將它作爲參數傳遞給代理對象?

任何幫助非常感謝!

回答

3

我已經找到了解決這個問題的辦法(不幸的是我已經失去了博客的地址,這導致了我 - 如果我可以再次找到它,我會給予應有的榮譽),它的作品完美。對於任何人誰是有興趣的,添加以下代碼:

private static void SetChannelProxy(HttpClientChannel channel, IWebProxy proxy) 
    { 
     FieldInfo proxyObjectFieldInfo = typeof(HttpClientChannel).GetField("_proxyObject", BindingFlags.Instance | BindingFlags.NonPublic); 

     proxyObjectFieldInfo.SetValue(channel, proxy); 
    } 

你應該使用你想使用,然後調用此方法要與代理使用通道的憑據首先配置你的代理對象。