【问题标题】:How to use proxy like browser OR CredentialCache.DefaultCredentials different between XP and 7如何使用浏览器之类的代理或 CredentialCache.DefaultCredentials 在 XP 和 7 之间有所不同
【发布时间】:2012-10-12 16:45:13
【问题描述】:

我能够解决客户端无法通过代理进行身份验证的问题:

    var proxy = WebRequest.GetSystemWebProxy();
    proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
    service.Proxy = proxy;

这适用于 Windows XP,但在 Windows 7 上我得到一个 407(代理未验证异常)。有谁知道有什么区别,更重要的是,我需要做什么才能让它在两个操作系统上运行?

更新

我让用户检查以下内容:

  1. 在注册表编辑器中,您能否转到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 并让我知道 CachedLogonsCount 的值是多少。 f
  2. 在开始框中,输入组策略,然后会弹出编辑组策略的选项,单击它。然后转到计算机配置\管理模板\系统\用户配置文件\删除漫游配置文件的缓存副本,让我知道它是否已配置,如果已配置,设置为什么?

赏金更新

所以,我添加了赏金。我可以从这里获取解决方案,或者只是通过 Windows 7 上的代理的替代方法...

另一个更新

我不确定这是否有用,但我们也在做以下事情:

service.PreAuthenticate = true;
service.Url = "myurl";
service.Credentials = new NetworkCredential(txt_UserName.Text, txt_Password.Text);

我的临时解决方案

这不是一个真正的解决方案,但目前有效。我正在使用 app.config 并将代理设置为默认值,并使用 ByPassList 以便甚至不使用代理。这只是可行的,因为代理目前没有强大的防火墙。对于其他客户,我需要让上述工作

【问题讨论】:

  • 这有点 UAC 的味道……
  • 我同意,但我找不到任何符合这些方面的文档。我正在尝试查找此类文档,如果找不到,我将尝试反编译代码并明确找出它在做什么

标签: c# .net-3.5 proxy credentials


【解决方案1】:

这段代码适用于 XP、Win7 和 2008

var webProxy = new WebProxy(WebRequest.DefaultWebProxy.GetProxy(new Uri({TheURLoftheService})));
webProxy.Credentials = CredentialCache.DefaultCredentials;
webProxy.UseDefaultCredentials = true;
service.Proxy = webProxy;

【讨论】:

  • 这并没有解决问题。我现在正在做同样的事情,只是你以不同的方式获取代理。当 DefaultCredentials 已经设置时,UseDefaultCredentials = true 什么都不做,根据msdn.microsoft.com/en-us/library/…
【解决方案2】:

实际上看起来他们在 Win7 中“修复”了它:) 你能确认客户端和服务器都指定了 http 1.1

现在让我们讨论一下为什么浏览器可以在这种情况下工作。 IE 在引擎盖下使用 WinINet 而不是 WinHTTP。如果我们看 网络跟踪我们看到 IE 发送 HTTP/1.1,但代理回复 使用 HTTP/1.0。 IE 仍然接受这种行为,因为在互联网 场景有无数的客户端和服务器仍然 使用 HTTP/1.0。

WinHTTP 严格要求符合 HTTP/1.1 以保持 HTTP/1.0 不支持连接活动和 HTTP Keep-Alives 协议。 HTTP Keep-Alive 特性是在 HTTP/1.1 中引入的 根据 RFC 2616 的协议。期望的服务器或代理 keep-alive 也应该正确地实现协议。 WinHTTP 开启 Windows 7、Windows 2008 R2 在安全性方面非常严格 协议合规性。理想的解决方案是更改服务器/代理 使用正确的协议并符合 RFC。

http://blogs.msdn.com/b/httpcontext/archive/2012/02/21/changes-in-winhttp-on-windows-7-and-onwards-wrto-http-1-0.aspx

【讨论】:

  • 非常有趣!我必须检查我什么时候去上班。如果是这样,这非常值得 250 赏金:)
  • 抱歉,不走运。这是 PCAP 输出:CONNECT URL:443 HTTP/1.1\r\n 后跟 HTTP/1.1 407 Unauthorized\r\n 在请求和响应中指定 HTTP 1.1
  • 虽然这不起作用,但我会将赏金奖励给你,因为你提出的唯一回应不是我已经“基本上”做出的回应
【解决方案3】:

这行得通吗?

我是用这个来设置代理的,目前在所有windows平台上都没有遇到错误

Uri address = new Uri("http://your-webservice-address");

//Get User current network credential
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(address, "Basic");

//Get HttpWebRequest
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

//Network Credential should be included on the request to avoid network issues when requesting to the web servic
request.Proxy = WebRequest.DefaultWebProxy;
request.Credentials = new NetworkCredential(credential.UserName, credential.Password, credential.Domain);

【讨论】:

  • 我尝试过使用地址的 getproxy,但不是 getcredentials。我会试一试,让你知道
  • 好酷..当你尝试并遇到一些错误时告诉我
【解决方案4】:

根据您提供的代码很难说。我怀疑是您的 IE 设置或代理变量。

检查http://social.msdn.microsoft.com/Forums/en/netfxnetcom/thread/61b71194-1758-4c7b-89fe-91be7363db13可能帮助。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2016-02-16
    • 1970-01-01
    • 2015-09-17
    • 2020-09-07
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多