我知道这个问题已经被问过很多次了。我已经阅读了这里和其他类似网站上的大多数帖子。
http://social.msdn.microsoft.com/forums/en us/ncl/thread/2931d21c - 9 - ca8 - 4256 b213 - 915 fad4c941b/
没有用。这里是环境
Windows Server 2008 R2 64bitVisual 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();
这是有效的,但看到它减慢了应用程序,我知道我可以编辑机器。我做的配置文件。它也奏效了!
<system.net>
<defaultProxy
useDefaultCredentials="true">
<proxy
proxyaddress="<proxyURL>:<port>"
bypassonlocal="True"/>
</defaultProxy>
</system.net>
至少持续一两天。然后它开始失败。
然后编辑成如下
<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";
这不起作用。
注:我可以复制机器。配置文件到我的电脑(Win XP),并从那里运行。exe(没有代理代码),它工作得很好。
64位操作系统是否需要做一些不同的事情?我也可以在服务器上打开IE8并访问URI。目标是对代理进行预认证,而不必在代码中提供用户名密码。
@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();
}
}
}
希望能有所帮助;-)
HttpWebRequest使用默认的Internet设置(IE)代理,所以如果它在服务器上的Internet Explorer上工作良好,那么从您的代码中也应该是ok的(提供它在相同的用户帐户下运行)。
我会写machine。
我要检查的一件事是在IIS中,你可以为Windows身份验证小程序配置提供者。这应该将NTLM和Kerberos作为提供者列在一个列表中;我会把它们调换一下,看看这是否有什么不同(例如,如果NTLM是列表的顶部,那么将Kerberos移到顶部)。很抱歉,我不能给你确切的说明,因为我这台机器上没有IIS。如果你还在挣扎,我建议你在服务器上运行Fiddler来捕获请求和响应流,以获得更多线索。