【问题标题】:How can I get WebClient (webservice client) to automatically use the default proxy server?如何让 WebClient(webservice 客户端)自动使用默认代理服务器?
【发布时间】:2013-06-02 17:18:06
【问题描述】:

我正在从 WinForms 应用程序调用 Web 服务。不使用代理服务器时一切正常,但是当使用代理时,应用程序崩溃,而不是它期望的 SOAP 请求的 XML 响应,它得到一个 HTML 错误页面,显示“需要身份验证”。

看来你可以像这样手动设置代理:

WebClient client = new WebClient();
WebProxy wp = new WebProxy("proxy server url here");
client.Proxy = wp;

...但在某种程度上,它似乎仍然看到代理服务器没有执行上述操作,因为生成的错误实际上来自代理服务器。它似乎没有从用户的计算机上获取 Windows 身份验证登录凭据。我怎样才能强迫它这样做?

在我自己的机器上,如果我使用 Fiddler 进行模拟(并启用“要求代理身份验证”选项),我会弹出一个对话框询问登录凭据,但这似乎不会在我的客户端机器上发生(使用真正的硬件代理 - McAfee Web Gateway)。

我该如何处理?是否需要为用户提供手动配置服务器的对话框,或者是否有设置告诉 WebClient 使用 Windows 默认代理和用户自己的登录凭据?

更新

似乎您可以使用以下代码获取代理服务器,但这不会导致身份验证对话框在所有情况下都出现(适用于某些 PC,但不适用于其他 PC):

IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
if (defaultProxy != null)
{
    defaultProxy.Credentials = CredentialCache.DefaultCredentials;
    client.Proxy = defaultProxy;
}

如果上面的代码是正确的,我不明白为什么有些用户不会被提示输入他们的凭据。 我是否必须输入自己的代码来收集用户凭据并将其提供给 WebRequest 对象?

【问题讨论】:

  • 不确定这是否相关,因为我认为我的应用程序已经以本地用户身份运行?
  • 哎呀,我的错……我最近处理 SQL CLRSprocs 太多了……“当你 [使用] 只是一把锤子时……”
  • WebClient 将,正如您所指出的,“由系统使用配置文件和 Internet Explorer 局域网设置进行设置”-WebClient.Proxy Property。如果客户端没有被提示输入凭据,要么他们有 IE 设置不要求他们,这可以通过 IE 中的站点分类进行配置,或者他们的代理不需要它们,可能是因为应用程序正在访问的站点位于他们的域已经?

标签: c# web-services soap proxy webclient


【解决方案1】:

尝试添加

  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>

到您的 app.config 文件

【讨论】:

  • 在 web.config 中也有帮助。应该放在
【解决方案2】:
using (WebClient webClient = new WebClient())
{

    webClient.UseDefaultCredentials = true;
    webClient.Proxy = WebRequest.GetSystemWebProxy();
}

这应该可以工作

【讨论】:

【解决方案3】:

首先尝试使用这个:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
    client.Proxy = proxy;
}

如果这不起作用,请尝试:

WebProxy proxy = WebProxy.GetDefaultProxy()
client.Proxy = proxy;

【讨论】:

  • WebPRoxy.GetDefaultProxy 已弃用。
猜你喜欢
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多