我正在从一个WinForms应用程序调用一个Web服务。当没有使用代理服务器时,一切正常,但当使用代理时,应用程序会崩溃,因为它收到的是一个HTML错误页面,而不是它期望的SOAP请求的XML响应,该页面显示“需要身份验证”。
看起来可以这样手动设置代理:
WebClient client = new WebClient();
WebProxy wp = new WebProxy("proxy server url here");
client.Proxy = wp;
然而,在某种程度上,似乎无论如何都能够看到代理服务器(proxy server),因为产生的错误实际上来自代理服务器。只是它似乎无法从用户计算机中获取Windows身份验证登录凭据。我该如何强制它执行此操作?
如果我在自己的机器上使用Fiddler进行模拟(并启用“要求代理身份验证”选项),会出现一个对话框,要求输入登录凭据,但是在我的客户机上(使用真实的硬件代理-McAfee Web Gateway)却似乎没有这种情况。
我该如何处理?我需要为用户提供一个对话框手动配置服务器,还是有一种设置可以告诉WebClient使用Windows默认代理和用户自己的登录凭据?
更新
似乎可以使用以下代码获取代理服务器,但这并不会在所有情况下弹出身份验证对话框(在某些PC上工作,但在其他PC上不起作用):
IWebProxy defaultProxy = WebRequest.DefaultWebProxy;
if (defaultProxy != null)
{
defaultProxy.Credentials = CredentialCache.DefaultCredentials;
client.Proxy = defaultProxy;
}
如果上面的代码正确,我不明白为什么有些用户不会被提示输入他们的凭据。我是否需要编写自己的代码来收集用户凭据并将其提供给 WebRequest 对象?