我正在从 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 对象?