2009-10-06 164 views
2

我的工作在網站上,在我從一個外部URL檢索XML數據,使用下面的代碼407需要代理身份驗證

WebRequest req = WebRequest.Create("External server url"); 
req.Proxy = new System.Net.WebProxy("proxyUrl:8080", true); 
req.Proxy.Credentials = CredentialCache.DefaultCredentials; 
WebResponse resp = req.GetResponse(); 
StreamReader textReader = new StreamReader(resp.GetResponseStream()); 
XmlTextReader xmlReader = new XmlTextReader(textReader); 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(xmlReader); 

此代碼是我的開發PC上工作正常(Windows XP時.NET 3.5)

但是,當我無論是在Windows XP中,在Windows Server 2003中),它給了我下面的錯誤

部署此代碼到IIS(「遠程服務器返回錯誤:(407)代理身份驗證「。

有時候它讓我

「遠程服務器返回錯誤:(502)錯誤的網關。」

下面的代碼是從我的web.config

<system.net> 
    <defaultProxy> 
     <proxy usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" /> 
    </defaultProxy> 
    </system.net> 

請幫幫我嗎?

[編輯] 甚至當我運行的網站開發芻議PC,而是通過IIS它給我的錯誤「遠程服務器返回錯誤:(407)代理身份驗證」

但是,當我從微軟開發芻議服務器上運行的網站,它運行良好

回答

1

,當你在web.config中修改片段,以它的工作原理:

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" /> 
    </defaultProxy> 
</system.net> 
+0

更改爲? – 2009-10-06 10:16:34

+0

@Mohit,我已經寫了CredentialCache.DefaultCredentials;內部源代碼,所以我不認爲它有所作爲? – 2009-10-06 10:24:09

0

這可能是由於該帳戶所致該IIS運行時沒有適當的權限來通過身份驗證代理。

當您在開發PC上運行它時,您正在運行它作爲您的登錄,我認爲它有權限通過代理。在IIS內運行時,它不像您一樣運行,因此可能無法通過代理。

您可以爲IIS用戶提供通過代理的權限(這將不太可能在域環境中工作,因爲IIS用戶將成爲本地用戶),或者配置您的應用程序以作爲網絡運行用戶有權通過代理。

這可以通過讓IIS作爲域用戶運行來完成(我不會推薦這種方法),也可以通過將應用程序配置爲使用web.config作爲域用戶來運行(請參閱this文章以獲取更多信息如何做到這一點)。

7

@Mohit阿加瓦爾

的建議將非常感謝 'useDefaultCredentials = 「真」',你是個明星!

我一直在努力爲Google Data API示例exe的數週工作獲得.NET庫,但沒有成功。添加你的建議解決了我的問題,我現在得到一個連接,而不是407代理驗證必需。

speadsheet.exe。配置內容必須是:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="true"/> 
    </defaultProxy> 
    </system.net> 
</configuration> 

在我的情況還不如谷歌建議:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<system.net> 
    <defaultProxy> 
    <proxy usesystemdefault="true"/> 
    </defaultProxy> 
</system.net> 
</configuration> 

http://code.google.com/p/google-gdata/wiki/WebProxySetup

1

下方。app.configWeb.config<configuration>元素:

<system.net> 
    <defaultProxy useDefaultCredentials="true"> 
    <proxy usesystemdefault="True"/> 
    </defaultProxy> 
</system.net> 
1

這可能對某人有幫助在那裏通過谷歌發現,你實際上可以把它用於可能沒有自己的AppName.exe.config文件的.NET應用程序(或者你可以修改它)。我們使用NextGen EPM(醫療調度/計費),他們的信用卡處理系統一直卡在我們的代理服務器上,因爲它不會通過憑證。我(在這種情況下NextGenEPM.exe.config)製作的EXEName.config文件,其中包含上面的代碼片段:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <defaultProxy useDefaultCredentials="true"> 
     <proxy usesystemdefault="true"/> 
    </defaultProxy> 
    </system.net> 
</configuration> 

成功!這使我能夠解決這個問題,而不會在我們的代理服務器中出現問題,該代理服務器堅持要求身份驗證,我們寧願不妥協。

0

我們花了很長時間來解決這個問題,並更新了我們的app.config以使用上述答案中指定的默認憑據。 但是,它仍然沒有工作! 在經歷了很多痛苦之後,我們發現我們的app.config並未被我們的點擊應用程序自動包含。 簡單的錯誤導致極度頭部失事!!!

1

如果要指定代理細節

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
      <system.net> 
       <defaultProxy enabled="true" useDefaultCredentials="true"> 
       <proxy proxyaddress="http://<ProxyServer>:<port>" 
         usesystemdefault="False" 
         bypassonlocal="True" 
         autoDetect="False" /> 
       </defaultProxy> 
      </system.net> 
</configuration> 

乾杯試試這個!