如何让WebClient(Web服务客户端)自动使用默认代理服务器?

Nic*_*ckG 11 c# proxy soap web-services webclient

我正在从WinForms应用程序调用web服务.当代理服务器未被使用时,一切正常,但是当使用代理时,应用程序崩溃而不是它对SOAP请求所期望的XML响应,它会得到一个HTML错误页面,上面写着"需要身份验证".

您似乎可以手动设置代理,如下所示:

WebClient client = new WebClient();
WebProxy wp = new WebProxy("proxy server url here");
client.Proxy = wp;
Run Code Online (Sandbox Code Playgroud)

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

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

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

更新

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

IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
if (defaultProxy != null)
{
    defaultProxy.Credentials = CredentialCache.DefaultCredentials;
    client.Proxy = defaultProxy;
}
Run Code Online (Sandbox Code Playgroud)

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

ycl*_*vnc 19

尝试添加

  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>
Run Code Online (Sandbox Code Playgroud)

到你的app.config文件

  • 在web.config中它也有帮助.应该放在<configuration>中 (2认同)

小智 5

using (WebClient webClient = new WebClient())
{

    webClient.UseDefaultCredentials = true;
    webClient.Proxy = WebRequest.GetSystemWebProxy();
}
Run Code Online (Sandbox Code Playgroud)

这应该有效

  • 对我来说不起作用,我仍然收到“407 需要代理身份验证” (2认同)

Cil*_*nco 0

首先尝试使用这个:

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

如果这不起作用尝试:

WebProxy proxy = WebProxy.GetDefaultProxy()
client.Proxy = proxy;
Run Code Online (Sandbox Code Playgroud)

  • WebPRoxy.GetDefaultProxy 已弃用。 (2认同)