我知道这已被问过很多次了。我已经阅读了这里的大部分帖子和其他类似的网站。
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/2931d21c-9ca8-4256-b213-915fad4c941b/
无济于事。这是环境
Windows Server 2008 R2 64位 Visual Studio 2008 .Net Framework 3.5
这是我试过的
我使用代码
进行了代理身份验证WebRequest req = WebRequest.Create(requestUri + data);
req.Proxy = new System.Net.WebProxy(<ProxyURL>:<port>",true);
req.Proxy.Credentials = CredentialCache.DefaultCredentials;
WebResponse resp = req.GetResponse();
这很有效,但看到它减慢了应用程序的速度,我了解到我可以编辑我所做的machine.config文件。它也有效!
<system.net>
<defaultProxy
useDefaultCredentials="true">
<proxy
proxyaddress="<proxyURL>:<port>"
bypassonlocal="True"/>
</defaultProxy>
</system.net>
至少一天或2.然后它开始失败。
然后我把它编辑到了这个
<system.net>
<defaultProxy
useDefaultCredentials="true">
<proxy usesystemdefault="True"/>
</defaultProxy>
</system.net>
根据我的理解,这将使用IE设置连接到代理,但仍然无法正常工作。我也尝试过代码
WebProxy proxy = new WebProxy(<proxy>:<port>);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(requestUri + data), "BASIC", new NetworkCredential(<username>,<password>));
proxy.Credentials = myCache;
request.Proxy = proxy;
request.Method = "GET";
这不起作用。
注意:我可以将machine.config文件复制到我的计算机(Win XP)并从那里运行.exe(没有代理代码),它工作正常。
64位操作系统需要做些什么吗?我也可以在服务器上打开IE8并访问URI就好了。目标是预先验证代理,而无需在代码中提供用户名密码。
答案 0 :(得分:5)
@David Moore是对的。如果IE在您手动浏览时工作正常,则只需添加req.Proxy.Credentials = CredentialCache.DefaultCredentials;
即可正常工作。
下面是从MSDN中获取的修改后的代码,该代码对我有用。
using System;
using System.Diagnostics;
using System.IO;
using System.Net;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
string urlDemo = "http://en.wikipedia.org/wiki/Main_Page";
// Create a request for the URL.
WebRequest request = WebRequest.Create(urlDemo);
// If required by the server, set the proxy credentials.
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
// Get the response.
WebResponse response = request.GetResponse();
// Display the status.
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Console.WriteLine(responseFromServer);
Console.ReadLine();
// Clean up the streams and the response.
reader.Close();
response.Close();
}
}
}
希望它有所帮助; - )
答案 1 :(得分:3)
HttpWebRequest无论如何都使用默认的Internet设置(IE)代理,所以如果它在服务器上的Internet Explorer中工作正常,那么你的代码也应该没问题(前提是它在同一个用户帐户下运行)。
我会把machine.config恢复原状。
我要检查的一件事是在IIS中,您是否可以为Windows身份验证小程序配置提供程序。这应列出NTLM和Kerberos作为列表中的提供者;我会切换它们,看看是否有所不同(例如,如果NTLM是列表的顶部,将Kerberos移到顶部)。对不起,我不能给你准确的说明,因为我在这台机器上没有IIS。
如果您还在苦苦挣扎,我建议您在服务器上运行Fiddler来捕获请求和响应流以获取更多线索。